Ver código fonte

Refresh .gitignore

kenan 1 ano atrás
pai
commit
81e1771dec
100 arquivos alterados com 29 adições e 27859 exclusões
  1. BIN
      .DS_Store
  2. 28 5
      .gitignore
  3. BIN
      Modules/.DS_Store
  4. 1 1
      README.md
  5. 0 10792
      composer.lock
  6. BIN
      deploy/.DS_Store
  7. BIN
      deploy/supervisord/.DS_Store
  8. 0 1
      runtime/container/aspects.cache
  9. 0 0
      runtime/container/classes.cache
  10. 0 41
      runtime/container/proxy/App_Controller_AbstractController.proxy.php
  11. 0 87
      runtime/container/proxy/App_Controller_CoreController.proxy.php
  12. 0 31
      runtime/container/proxy/App_Controller_IndexController.proxy.php
  13. 0 94
      runtime/container/proxy/App_Task_ConfigUsdtRate.proxy.php
  14. 0 44
      runtime/container/proxy/App_Task_ExpiredOrder.proxy.php
  15. 0 43
      runtime/container/proxy/App_Task_RebateListInit.proxy.php
  16. 0 372
      runtime/container/proxy/Modules_Api_Controllers_AuthController.proxy.php
  17. 0 68
      runtime/container/proxy/Modules_Api_Controllers_BaseController.proxy.php
  18. 0 63
      runtime/container/proxy/Modules_Api_Controllers_BulletinController.proxy.php
  19. 0 60
      runtime/container/proxy/Modules_Api_Controllers_CategoryController.proxy.php
  20. 0 108
      runtime/container/proxy/Modules_Api_Controllers_CodeController.proxy.php
  21. 0 64
      runtime/container/proxy/Modules_Api_Controllers_CoinsController.proxy.php
  22. 0 138
      runtime/container/proxy/Modules_Api_Controllers_CommentController.proxy.php
  23. 0 600
      runtime/container/proxy/Modules_Api_Controllers_CreatorController.proxy.php
  24. 0 55
      runtime/container/proxy/Modules_Api_Controllers_DemoController.proxy.php
  25. 0 79
      runtime/container/proxy/Modules_Api_Controllers_FeedbackController.proxy.php
  26. 0 291
      runtime/container/proxy/Modules_Api_Controllers_HotelRecordController.proxy.php
  27. 0 125
      runtime/container/proxy/Modules_Api_Controllers_InnerController.proxy.php
  28. 0 27
      runtime/container/proxy/Modules_Api_Controllers_KeywordsController.proxy.php
  29. 0 270
      runtime/container/proxy/Modules_Api_Controllers_LogController.proxy.php
  30. 0 194
      runtime/container/proxy/Modules_Api_Controllers_M3u8Controller.proxy.php
  31. 0 352
      runtime/container/proxy/Modules_Api_Controllers_MessageController.proxy.php
  32. 0 64
      runtime/container/proxy/Modules_Api_Controllers_MsgController.proxy.php
  33. 0 90
      runtime/container/proxy/Modules_Api_Controllers_OrderController.proxy.php
  34. 0 585
      runtime/container/proxy/Modules_Api_Controllers_OriginaController.proxy.php
  35. 0 459
      runtime/container/proxy/Modules_Api_Controllers_PerfectController.proxy.php
  36. 0 334
      runtime/container/proxy/Modules_Api_Controllers_PublishController.proxy.php
  37. 0 276
      runtime/container/proxy/Modules_Api_Controllers_RelationController.proxy.php
  38. 0 212
      runtime/container/proxy/Modules_Api_Controllers_SiteController.proxy.php
  39. 0 310
      runtime/container/proxy/Modules_Api_Controllers_TagController.proxy.php
  40. 0 92
      runtime/container/proxy/Modules_Api_Controllers_TestController.proxy.php
  41. 0 121
      runtime/container/proxy/Modules_Api_Controllers_TopicController.proxy.php
  42. 0 43
      runtime/container/proxy/Modules_Api_Controllers_UploadController.proxy.php
  43. 0 280
      runtime/container/proxy/Modules_Api_Controllers_UserController.proxy.php
  44. 0 848
      runtime/container/proxy/Modules_Api_Controllers_VideoController.proxy.php
  45. 0 90
      runtime/container/proxy/Modules_Api_Controllers_VipController.proxy.php
  46. 0 423
      runtime/container/proxy/Modules_Api_Controllers_WithdrawController.proxy.php
  47. 0 287
      runtime/container/proxy/Modules_Manage_Controllers_AdController.proxy.php
  48. 0 166
      runtime/container/proxy/Modules_Manage_Controllers_AuthController.proxy.php
  49. 0 107
      runtime/container/proxy/Modules_Manage_Controllers_BaseController.proxy.php
  50. 0 118
      runtime/container/proxy/Modules_Manage_Controllers_BulletinController.proxy.php
  51. 0 177
      runtime/container/proxy/Modules_Manage_Controllers_CardController.proxy.php
  52. 0 182
      runtime/container/proxy/Modules_Manage_Controllers_CategoryController.proxy.php
  53. 0 178
      runtime/container/proxy/Modules_Manage_Controllers_ChannelController.proxy.php
  54. 0 92
      runtime/container/proxy/Modules_Manage_Controllers_ChatController.proxy.php
  55. 0 200
      runtime/container/proxy/Modules_Manage_Controllers_CoinsController.proxy.php
  56. 0 104
      runtime/container/proxy/Modules_Manage_Controllers_CommentController.proxy.php
  57. 0 131
      runtime/container/proxy/Modules_Manage_Controllers_CreatorController.proxy.php
  58. 0 145
      runtime/container/proxy/Modules_Manage_Controllers_FanGroupController.proxy.php
  59. 0 93
      runtime/container/proxy/Modules_Manage_Controllers_FeedbackController.proxy.php
  60. 0 411
      runtime/container/proxy/Modules_Manage_Controllers_FinanceController.proxy.php
  61. 0 56
      runtime/container/proxy/Modules_Manage_Controllers_HotelRecordController.proxy.php
  62. 0 104
      runtime/container/proxy/Modules_Manage_Controllers_InviteRuleController.proxy.php
  63. 0 90
      runtime/container/proxy/Modules_Manage_Controllers_M3u8Controller.proxy.php
  64. 0 300
      runtime/container/proxy/Modules_Manage_Controllers_ManagerController.proxy.php
  65. 0 675
      runtime/container/proxy/Modules_Manage_Controllers_OrderController.proxy.php
  66. 0 604
      runtime/container/proxy/Modules_Manage_Controllers_OriginaController.proxy.php
  67. 0 262
      runtime/container/proxy/Modules_Manage_Controllers_PermissionController.proxy.php
  68. 0 180
      runtime/container/proxy/Modules_Manage_Controllers_StatisticsController.proxy.php
  69. 0 152
      runtime/container/proxy/Modules_Manage_Controllers_SysMessageController.proxy.php
  70. 0 140
      runtime/container/proxy/Modules_Manage_Controllers_SystemController.proxy.php
  71. 0 282
      runtime/container/proxy/Modules_Manage_Controllers_TagController.proxy.php
  72. 0 81
      runtime/container/proxy/Modules_Manage_Controllers_TaskController.proxy.php
  73. 0 38
      runtime/container/proxy/Modules_Manage_Controllers_TopicController.proxy.php
  74. 0 248
      runtime/container/proxy/Modules_Manage_Controllers_TypeController.proxy.php
  75. 0 61
      runtime/container/proxy/Modules_Manage_Controllers_UploadController.proxy.php
  76. 0 248
      runtime/container/proxy/Modules_Manage_Controllers_UsdtController.proxy.php
  77. 0 504
      runtime/container/proxy/Modules_Manage_Controllers_UserController.proxy.php
  78. 0 158
      runtime/container/proxy/Modules_Manage_Controllers_VersionController.proxy.php
  79. 0 1059
      runtime/container/proxy/Modules_Manage_Controllers_VideoController.proxy.php
  80. 0 212
      runtime/container/proxy/Modules_Manage_Controllers_VipCodeController.proxy.php
  81. 0 198
      runtime/container/proxy/Modules_Manage_Controllers_WithdrawController.proxy.php
  82. 0 49
      runtime/container/proxy/Modules_Web_Controllers_BaseController.proxy.php
  83. 0 513
      runtime/container/proxy/Modules_Web_Controllers_PcController.proxy.php
  84. 0 137
      runtime/container/proxy/Modules_Web_Controllers_PromotionController.proxy.php
  85. 0 162
      runtime/container/proxy/Modules_Web_Controllers_TurntableController.proxy.php
  86. 0 0
      runtime/container/scan.cache
  87. 0 1
      runtime/hyperf.pid
  88. 0 132
      runtime/logs/hyperf-2022-05-02.log
  89. 0 205
      runtime/logs/hyperf-2022-05-03.log
  90. 0 38
      runtime/logs/hyperf-2022-05-12.log
  91. 0 37
      runtime/logs/hyperf-2022-05-27.log
  92. 0 2
      runtime/logs/hyperf-2022-05-28.log
  93. 0 4
      runtime/logs/hyperf-2022-05-29.log
  94. 0 33
      runtime/logs/hyperf-2022-06-02.log
  95. 0 191
      runtime/logs/hyperf-2022-06-03.log
  96. 0 7
      runtime/logs/hyperf-2022-06-04.log
  97. 0 34
      runtime/logs/hyperf-2022-06-05.log
  98. 0 35
      runtime/logs/hyperf-2022-06-07.log
  99. 0 2
      runtime/logs/hyperf-2022-06-08.log
  100. 0 2
      runtime/logs/hyperf-2022-06-09.log

BIN
.DS_Store


+ 28 - 5
.gitignore

@@ -1,6 +1,29 @@
-# ---> Laravel
-/bootstrap/compiled.php
-.env.*.php
-.env.php
+.buildpath
+.settings/
+.project
+*.patch
+.idea/
+.git/
+.run/
+runtime/
+vendor/
+.phpintel/
 .env
-
+.DS_Store
+*.lock
+.phpunit*
+*.cache
+dump.rdb
+web.config
+.github/
+.vscode/vendor/
+storage/cache/
+storage/tmp/
+storage/hotelRecords/
+storage/hotelRecords_2/
+storage/test/
+npm-debug.log
+yarn-error.log
+.vagrant/
+.php_cs.cache
+composer.lock

BIN
Modules/.DS_Store


+ 1 - 1
README.md

@@ -1,4 +1,4 @@
-# 雏姬后端 项目
+# 视频后端 项目
 
 ## 技术
 此项目采用[Hyperf2.2](https://hyperf.wiki/2.2/).

+ 0 - 10792
composer.lock

@@ -1,10792 +0,0 @@
-{
-    "_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": "ea0dd73a23b07d5c94a600502c7adea0",
-    "packages": [
-        {
-            "name": "carbonphp/carbon-doctrine-types",
-            "version": "2.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git",
-                "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/99f76ffa36cce3b70a4a6abce41dba15ca2e84cb",
-                "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.4 || ^8.0"
-            },
-            "conflict": {
-                "doctrine/dbal": "<3.7.0 || >=4.0.0"
-            },
-            "require-dev": {
-                "doctrine/dbal": "^3.7.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/2.1.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": "2023-12-11T17:09:12+00:00"
-        },
-        {
-            "name": "doctrine/annotations",
-            "version": "1.14.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/annotations.git",
-                "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/annotations/zipball/253dca476f70808a5aeed3a47cc2cc88c5cab915",
-                "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/lexer": "^1 || ^2",
-                "ext-tokenizer": "*",
-                "php": "^7.1 || ^8.0",
-                "psr/cache": "^1 || ^2 || ^3"
-            },
-            "require-dev": {
-                "doctrine/cache": "^1.11 || ^2.0",
-                "doctrine/coding-standard": "^9 || ^12",
-                "phpstan/phpstan": "~1.4.10 || ^1.10.28",
-                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
-                "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7",
-                "vimeo/psalm": "^4.30 || ^5.14"
-            },
-            "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/1.14.4"
-            },
-            "time": "2024-09-05T10:15:52+00:00"
-        },
-        {
-            "name": "doctrine/deprecations",
-            "version": "1.1.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/deprecations.git",
-                "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9",
-                "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1 || ^8.0"
-            },
-            "require-dev": {
-                "doctrine/coding-standard": "^9 || ^12",
-                "phpstan/phpstan": "1.4.10 || 2.0.3",
-                "phpstan/phpstan-phpunit": "^1.0 || ^2",
-                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
-                "psr/log": "^1 || ^2 || ^3"
-            },
-            "suggest": {
-                "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Deprecations\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
-            "homepage": "https://www.doctrine-project.org/",
-            "support": {
-                "issues": "https://github.com/doctrine/deprecations/issues",
-                "source": "https://github.com/doctrine/deprecations/tree/1.1.4"
-            },
-            "time": "2024-12-07T21:18:45+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": ""
-            },
-            "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": ""
-            },
-            "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": "2.1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/lexer.git",
-                "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/lexer/zipball/861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6",
-                "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/deprecations": "^1.0",
-                "php": "^7.1 || ^8.0"
-            },
-            "require-dev": {
-                "doctrine/coding-standard": "^9 || ^12",
-                "phpstan/phpstan": "^1.3",
-                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6",
-                "psalm/plugin-phpunit": "^0.18.3",
-                "vimeo/psalm": "^4.11 || ^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/2.1.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:35:39+00:00"
-        },
-        {
-            "name": "egulias/email-validator",
-            "version": "3.2.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/egulias/EmailValidator.git",
-                "reference": "e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7",
-                "reference": "e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/lexer": "^1.2|^2",
-                "php": ">=7.2",
-                "symfony/polyfill-intl-idn": "^1.15"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^8.5.8|^9.3.3",
-                "vimeo/psalm": "^4"
-            },
-            "suggest": {
-                "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Egulias\\EmailValidator\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Eduardo Gulias Davis"
-                }
-            ],
-            "description": "A library for validating emails against several RFCs",
-            "homepage": "https://github.com/egulias/EmailValidator",
-            "keywords": [
-                "email",
-                "emailvalidation",
-                "emailvalidator",
-                "validation",
-                "validator"
-            ],
-            "support": {
-                "issues": "https://github.com/egulias/EmailValidator/issues",
-                "source": "https://github.com/egulias/EmailValidator/tree/3.2.6"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/egulias",
-                    "type": "github"
-                }
-            ],
-            "time": "2023-06-01T07:04:22+00:00"
-        },
-        {
-            "name": "elasticsearch/elasticsearch",
-            "version": "v7.17.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/elastic/elasticsearch-php.git",
-                "reference": "2d302233f2bb0926812d82823bb820d405e130fc"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/2d302233f2bb0926812d82823bb820d405e130fc",
-                "reference": "2d302233f2bb0926812d82823bb820d405e130fc",
-                "shasum": ""
-            },
-            "require": {
-                "ext-json": ">=1.3.7",
-                "ezimuel/ringphp": "^1.1.2",
-                "php": "^7.3 || ^8.0",
-                "psr/log": "^1|^2|^3"
-            },
-            "require-dev": {
-                "ext-yaml": "*",
-                "ext-zip": "*",
-                "mockery/mockery": "^1.2",
-                "phpstan/phpstan": "^1.10",
-                "phpunit/phpunit": "^9.3",
-                "squizlabs/php_codesniffer": "^3.4",
-                "symfony/finder": "~4.0"
-            },
-            "suggest": {
-                "ext-curl": "*",
-                "monolog/monolog": "Allows for client-level logging and tracing"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "src/autoload.php"
-                ],
-                "psr-4": {
-                    "Elasticsearch\\": "src/Elasticsearch/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0",
-                "LGPL-2.1-only"
-            ],
-            "authors": [
-                {
-                    "name": "Zachary Tong"
-                },
-                {
-                    "name": "Enrico Zimuel"
-                }
-            ],
-            "description": "PHP Client for Elasticsearch",
-            "keywords": [
-                "client",
-                "elasticsearch",
-                "search"
-            ],
-            "support": {
-                "issues": "https://github.com/elastic/elasticsearch-php/issues",
-                "source": "https://github.com/elastic/elasticsearch-php/tree/v7.17.2"
-            },
-            "time": "2023-04-21T15:31:12+00:00"
-        },
-        {
-            "name": "ezimuel/guzzlestreams",
-            "version": "3.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/ezimuel/guzzlestreams.git",
-                "reference": "b4b5a025dfee70d6cd34c780e07330eb93d5b997"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/ezimuel/guzzlestreams/zipball/b4b5a025dfee70d6cd34c780e07330eb93d5b997",
-                "reference": "b4b5a025dfee70d6cd34c780e07330eb93d5b997",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.4.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~9.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "GuzzleHttp\\Stream\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling@gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                }
-            ],
-            "description": "Fork of guzzle/streams (abandoned) to be used with elasticsearch-php",
-            "homepage": "http://guzzlephp.org/",
-            "keywords": [
-                "Guzzle",
-                "stream"
-            ],
-            "support": {
-                "source": "https://github.com/ezimuel/guzzlestreams/tree/3.1.0"
-            },
-            "time": "2022-10-24T12:58:50+00:00"
-        },
-        {
-            "name": "ezimuel/ringphp",
-            "version": "1.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/ezimuel/ringphp.git",
-                "reference": "5e4ee1dfc7a323b87873b83f17c69c76ba047793"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/ezimuel/ringphp/zipball/5e4ee1dfc7a323b87873b83f17c69c76ba047793",
-                "reference": "5e4ee1dfc7a323b87873b83f17c69c76ba047793",
-                "shasum": ""
-            },
-            "require": {
-                "ezimuel/guzzlestreams": "^3.0.1",
-                "php": ">=5.4.0",
-                "react/promise": "^2.0 || ^3.0"
-            },
-            "replace": {
-                "guzzlehttp/ringphp": "self.version"
-            },
-            "require-dev": {
-                "ext-curl": "*",
-                "phpunit/phpunit": "~9.0"
-            },
-            "suggest": {
-                "ext-curl": "Guzzle will use specific adapters if cURL is present"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.1-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "GuzzleHttp\\Ring\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling@gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                }
-            ],
-            "description": "Fork of guzzle/RingPHP (abandoned) to be used with elasticsearch-php",
-            "support": {
-                "source": "https://github.com/ezimuel/ringphp/tree/1.3.0"
-            },
-            "time": "2025-02-24T10:29:27+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": ""
-            },
-            "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": "graham-campbell/result-type",
-            "version": "v1.1.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/GrahamCampbell/Result-Type.git",
-                "reference": "3ba905c11371512af9d9bdd27d99b782216b6945"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945",
-                "reference": "3ba905c11371512af9d9bdd27d99b782216b6945",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.2.5 || ^8.0",
-                "phpoption/phpoption": "^1.9.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28"
-            },
-            "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/v1.1.3"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/GrahamCampbell",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-07-20T21:45:45+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": ""
-            },
-            "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.0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/guzzle/promises.git",
-                "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455",
-                "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455",
-                "shasum": ""
-            },
-            "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.0.4"
-            },
-            "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": "2024-10-17T10:06:22+00:00"
-        },
-        {
-            "name": "guzzlehttp/psr7",
-            "version": "2.7.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/guzzle/psr7.git",
-                "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
-                "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
-                "shasum": ""
-            },
-            "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.0"
-            },
-            "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": "2024-07-18T11:15:46+00:00"
-        },
-        {
-            "name": "hashids/hashids",
-            "version": "4.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/vinkla/hashids.git",
-                "reference": "8cab111f78e0bd9c76953b082919fc9e251761be"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/vinkla/hashids/zipball/8cab111f78e0bd9c76953b082919fc9e251761be",
-                "reference": "8cab111f78e0bd9c76953b082919fc9e251761be",
-                "shasum": ""
-            },
-            "require": {
-                "ext-mbstring": "*",
-                "php": "^7.2 || ^8.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^8.0 || ^9.4",
-                "squizlabs/php_codesniffer": "^3.5"
-            },
-            "suggest": {
-                "ext-bcmath": "Required to use BC Math arbitrary precision mathematics (*).",
-                "ext-gmp": "Required to use GNU multiple precision mathematics (*)."
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.1-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Hashids\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Ivan Akimov",
-                    "email": "ivan@barreleye.com"
-                },
-                {
-                    "name": "Vincent Klaiber",
-                    "email": "hello@doubledip.se"
-                }
-            ],
-            "description": "Generate short, unique, non-sequential ids (like YouTube and Bitly) from numbers",
-            "homepage": "https://hashids.org/php",
-            "keywords": [
-                "bitly",
-                "decode",
-                "encode",
-                "hash",
-                "hashid",
-                "hashids",
-                "ids",
-                "obfuscate",
-                "youtube"
-            ],
-            "support": {
-                "issues": "https://github.com/vinkla/hashids/issues",
-                "source": "https://github.com/vinkla/hashids/tree/4.1.0"
-            },
-            "time": "2020-11-26T19:24:33+00:00"
-        },
-        {
-            "name": "hyperf/amqp",
-            "version": "v2.2.37",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/amqp.git",
-                "reference": "01b18eb54909629ea22f35140a77c12f1ae8cde0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/amqp/zipball/01b18eb54909629ea22f35140a77c12f1ae8cde0",
-                "reference": "01b18eb54909629ea22f35140a77c12f1ae8cde0",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/instantiator": "^1.2.0",
-                "hyperf/contract": "~2.2.0",
-                "hyperf/pool": "~2.2.0",
-                "hyperf/process": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2",
-                "php-amqplib/php-amqplib": "3.4.0",
-                "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": "2.2-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"
-            },
-            "time": "2023-01-19T06:44:45+00:00"
-        },
-        {
-            "name": "hyperf/async-queue",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/async-queue.git",
-                "reference": "6e8da55c8b19322023d5fdd970bcbddf774e79f0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/async-queue/zipball/6e8da55c8b19322023d5fdd970bcbddf774e79f0",
-                "reference": "6e8da55c8b19322023d5fdd970bcbddf774e79f0",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/command": "~2.2.0",
-                "hyperf/contract": "~2.2.8",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2",
-                "psr/container": "^1.0|^2.0",
-                "psr/event-dispatcher": "^1.0"
-            },
-            "suggest": {
-                "hyperf/di": "Required to use annotations.",
-                "hyperf/event": "Required to dispatch a event.",
-                "hyperf/logger": "Required to use QueueHandleListener.",
-                "hyperf/process": "Auto register the consumer process for server."
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\AsyncQueue\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Hyperf\\AsyncQueue\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "A async queue component for hyperf.",
-            "homepage": "https://hyperf.io",
-            "keywords": [
-                "async-queue",
-                "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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/cache",
-            "version": "v2.2.40",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/cache.git",
-                "reference": "118ca172828d51f5eea6e3d654df6275705ddeef"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/cache/zipball/118ca172828d51f5eea6e3d654df6275705ddeef",
-                "reference": "118ca172828d51f5eea6e3d654df6275705ddeef",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/contract": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2",
-                "psr/container": "^1.0|^2.0",
-                "psr/simple-cache": "^1.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": "2.2-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"
-            },
-            "time": "2023-06-19T10:24:33+00:00"
-        },
-        {
-            "name": "hyperf/command",
-            "version": "v2.2.35",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/command.git",
-                "reference": "48cd9789166ecf5f3009de45bcf128b997ec5f88"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/command/zipball/48cd9789166ecf5f3009de45bcf128b997ec5f88",
-                "reference": "48cd9789166ecf5f3009de45bcf128b997ec5f88",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2",
-                "psr/event-dispatcher": "^1.0",
-                "symfony/console": ">=5.0 <5.4.12"
-            },
-            "suggest": {
-                "hyperf/di": "Required to use annotations."
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.2-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/v2.2.35"
-            },
-            "time": "2022-08-27T07:28:56+00:00"
-        },
-        {
-            "name": "hyperf/config",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/config.git",
-                "reference": "9437f45aea36358840c907691e9b28492550e9a3"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/config/zipball/9437f45aea36358840c907691e9b28492550e9a3",
-                "reference": "9437f45aea36358840c907691e9b28492550e9a3",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/contract": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2",
-                "psr/container": "^1.0|^2.0",
-                "symfony/finder": "^5.0"
-            },
-            "suggest": {
-                "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": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/config-apollo",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/config-apollo.git",
-                "reference": "c6e31598c9110ccf6f34e3fdb6efa4dda1860530"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/config-apollo/zipball/c6e31598c9110ccf6f34e3fdb6efa4dda1860530",
-                "reference": "c6e31598c9110ccf6f34e3fdb6efa4dda1860530",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/config-center": "~2.2.0",
-                "hyperf/contract": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2",
-                "psr/container": "^1.0|^2.0"
-            },
-            "suggest": {
-                "hyperf/process": "Use hyperf process to run ConfigFetcherProcess."
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\ConfigApollo\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Hyperf\\ConfigApollo\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "An apollo adapter for Hyperf config component.",
-            "homepage": "https://hyperf.io",
-            "keywords": [
-                "apollo",
-                "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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/config-center",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/config-center.git",
-                "reference": "44d9f623dafacdd42d0e25d01e5b3b80a1568cf3"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/config-center/zipball/44d9f623dafacdd42d0e25d01e5b3b80a1568cf3",
-                "reference": "44d9f623dafacdd42d0e25d01e5b3b80a1568cf3",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3"
-            },
-            "suggest": {
-                "hyperf/process": "^2.1"
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\ConfigCenter\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/constants",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/constants.git",
-                "reference": "adb652d446bde384af9ad907cfabe900f3dd08b8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/constants/zipball/adb652d446bde384af9ad907cfabe900f3dd08b8",
-                "reference": "adb652d446bde384af9ad907cfabe900f3dd08b8",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/di": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2"
-            },
-            "suggest": {
-                "hyperf/translation": "Required to use translation."
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\Constants\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/consul",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/consul.git",
-                "reference": "f6a79a935bc481d8aead0ef36345f19cfc89d009"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/consul/zipball/f6a79a935bc481d8aead0ef36345f19cfc89d009",
-                "reference": "f6a79a935bc481d8aead0ef36345f19cfc89d009",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/guzzle": "~2.2.0",
-                "php": ">=7.2"
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\Consul\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/context",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/context.git",
-                "reference": "f2e77442693a07d47f7ca97f8b2fdb8e17196a47"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/context/zipball/f2e77442693a07d47f7ca97f8b2fdb8e17196a47",
-                "reference": "f2e77442693a07d47f7ca97f8b2fdb8e17196a47",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/engine": "^1.1",
-                "php": ">=7.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Hyperf\\Context\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "A coroutine 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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/contract",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/contract.git",
-                "reference": "1ebf037c91d76ec05af9e5cb3335b0f5ec810e27"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/contract/zipball/1ebf037c91d76ec05af9e5cb3335b0f5ec810e27",
-                "reference": "1ebf037c91d76ec05af9e5cb3335b0f5ec810e27",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/crontab",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/crontab.git",
-                "reference": "64e1a6db961fdf46a111ec172956abb5a386511c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/crontab/zipball/64e1a6db961fdf46a111ec172956abb5a386511c",
-                "reference": "64e1a6db961fdf46a111ec172956abb5a386511c",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/utils": "~2.2.0",
-                "nesbot/carbon": "^2.0",
-                "php": ">=7.2"
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\Crontab\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Hyperf\\Crontab\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "A crontab component for Hyperf.",
-            "homepage": "https://hyperf.io",
-            "keywords": [
-                "crontab",
-                "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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/database",
-            "version": "v2.2.41",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/database.git",
-                "reference": "b4c8f8e8f417b11754d4e94fedafc7eec273b188"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/database/zipball/b4c8f8e8f417b11754d4e94fedafc7eec273b188",
-                "reference": "b4c8f8e8f417b11754d4e94fedafc7eec273b188",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/macroable": "~2.2.0",
-                "hyperf/utils": "~2.2.8",
-                "nesbot/carbon": "^2.0",
-                "php": ">=7.2",
-                "psr/container": "^1.0|^2.0",
-                "psr/event-dispatcher": "^1.0"
-            },
-            "suggest": {
-                "doctrine/dbal": "Required to rename columns (^3.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": "2.2-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": "2024-05-16T12:32:45+00:00"
-        },
-        {
-            "name": "hyperf/db-connection",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/db-connection.git",
-                "reference": "05d2a1e858f01682739e066430b339a9bcdef837"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/db-connection/zipball/05d2a1e858f01682739e066430b339a9bcdef837",
-                "reference": "05d2a1e858f01682739e066430b339a9bcdef837",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/database": "~2.2.0",
-                "hyperf/di": "~2.2.0",
-                "hyperf/framework": "~2.2.0",
-                "hyperf/model-listener": "~2.2.0",
-                "hyperf/pool": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2"
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\DbConnection\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/di",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/di.git",
-                "reference": "471c3cf9e0c02ab3aaa0c6e9884062bd541e4577"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/di/zipball/471c3cf9e0c02ab3aaa0c6e9884062bd541e4577",
-                "reference": "471c3cf9e0c02ab3aaa0c6e9884062bd541e4577",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/annotations": "^1.6",
-                "doctrine/instantiator": "^1.0",
-                "nikic/php-parser": "^4.1",
-                "php": ">=7.3",
-                "php-di/phpdoc-reader": "^2.2",
-                "psr/container": "^1.0|^2.0",
-                "symfony/finder": "^5.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": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/dispatcher",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/dispatcher.git",
-                "reference": "bcffa8faa11367204c4e00e93f6425d600603e03"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/dispatcher/zipball/bcffa8faa11367204c4e00e93f6425d600603e03",
-                "reference": "bcffa8faa11367204c4e00e93f6425d600603e03",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/contract": "~2.2.0",
-                "php": ">=7.2",
-                "psr/container": "^1.0|^2.0",
-                "psr/http-message": "^1.0",
-                "psr/http-server-middleware": "^1.0"
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\Dispatcher\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/elasticsearch",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/elasticsearch.git",
-                "reference": "ee6ce4771aac0094f540e1bb3bcf23bfea24ac37"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/elasticsearch/zipball/ee6ce4771aac0094f540e1bb3bcf23bfea24ac37",
-                "reference": "ee6ce4771aac0094f540e1bb3bcf23bfea24ac37",
-                "shasum": ""
-            },
-            "require": {
-                "elasticsearch/elasticsearch": "^7.0",
-                "hyperf/guzzle": "~2.2.0",
-                "php": ">=7.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Hyperf\\Elasticsearch\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Elasticsearch client for hyperf",
-            "keywords": [
-                "elasticsearch",
-                "php",
-                "swoole"
-            ],
-            "support": {
-                "issues": "https://github.com/hyperf/elasticsearch/issues",
-                "source": "https://github.com/hyperf/elasticsearch/tree/v2.2.33"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/engine",
-            "version": "v1.10.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/engine.git",
-                "reference": "da38c8708f3d78d1490331e432d385489720568f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/engine/zipball/da38c8708f3d78d1490331e432d385489720568f",
-                "reference": "da38c8708f3d78d1490331e432d385489720568f",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.0"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^3.0",
-                "hyperf/guzzle": "^2.2",
-                "hyperf/http-message": " ^2.0",
-                "phpstan/phpstan": "^1.0",
-                "phpunit/phpunit": "^9.4",
-                "swoole/ide-helper": "dev-master"
-            },
-            "suggest": {
-                "ext-swoole": ">=4.5"
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\Engine\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "1.10-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Hyperf\\Engine\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "keywords": [
-                "hyperf",
-                "php"
-            ],
-            "support": {
-                "issues": "https://github.com/hyperf/engine/issues",
-                "source": "https://github.com/hyperf/engine/tree/v1.10.0"
-            },
-            "time": "2023-04-07T07:39:09+00:00"
-        },
-        {
-            "name": "hyperf/event",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/event.git",
-                "reference": "cd92f5c1218c65f29b15c4d12dcf5835e0426ac8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/event/zipball/cd92f5c1218c65f29b15c4d12dcf5835e0426ac8",
-                "reference": "cd92f5c1218c65f29b15c4d12dcf5835e0426ac8",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/contract": "~2.2.0",
-                "php": ">=7.2",
-                "psr/event-dispatcher": "^1.0"
-            },
-            "suggest": {
-                "hyperf/di": "Required to use annotatioins."
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\Event\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/exception-handler",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/exception-handler.git",
-                "reference": "4ec8f6debf530b661bb2b436ef96da53ce0abbdc"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/exception-handler/zipball/4ec8f6debf530b661bb2b436ef96da53ce0abbdc",
-                "reference": "4ec8f6debf530b661bb2b436ef96da53ce0abbdc",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/contract": "~2.2.0",
-                "hyperf/dispatcher": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2",
-                "psr/container": "^1.0|^2.0",
-                "psr/http-message": "^1.0"
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\ExceptionHandler\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/framework",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/framework.git",
-                "reference": "49e98fb747214bcac79aecadda8349e70b8f2891"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/framework/zipball/49e98fb747214bcac79aecadda8349e70b8f2891",
-                "reference": "49e98fb747214bcac79aecadda8349e70b8f2891",
-                "shasum": ""
-            },
-            "require": {
-                "fig/http-message-util": "^1.1.2",
-                "hyperf/contract": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2",
-                "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)."
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\Framework\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/guzzle",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/guzzle.git",
-                "reference": "ef4d6b02778cf44b7f0edefd9c33a5d8d08ad48f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/guzzle/zipball/ef4d6b02778cf44b7f0edefd9c33a5d8d08ad48f",
-                "reference": "ef4d6b02778cf44b7f0edefd9c33a5d8d08ad48f",
-                "shasum": ""
-            },
-            "require": {
-                "guzzlehttp/guzzle": "^6.3|^7.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.0",
-                "psr/container": "^1.0|^2.0",
-                "psr/http-message": "^1.0"
-            },
-            "suggest": {
-                "hyperf/pool": "Required to use pool handler."
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\Guzzle\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-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/v2.2.33"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/http-message",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/http-message.git",
-                "reference": "d71d796177ec72fe30d116c57ed8bd8121a57b6e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/http-message/zipball/d71d796177ec72fe30d116c57ed8bd8121a57b6e",
-                "reference": "d71d796177ec72fe30d116c57ed8bd8121a57b6e",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/utils": "~2.2.0",
-                "laminas/laminas-mime": "^2.7",
-                "psr/http-message": "^1.0"
-            },
-            "suggest": {
-                "psr/container": "Required to replace RequestParserInterface."
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\HttpMessage\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-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/v2.2.33"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/http-server",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/http-server.git",
-                "reference": "0f1f22d408de82c9f8fb3f2cf57457e319210798"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/http-server/zipball/0f1f22d408de82c9f8fb3f2cf57457e319210798",
-                "reference": "0f1f22d408de82c9f8fb3f2cf57457e319210798",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/contract": "~2.2.0",
-                "hyperf/dispatcher": "~2.2.0",
-                "hyperf/event": "~2.2.0",
-                "hyperf/exception-handler": "~2.2.0",
-                "hyperf/http-message": "~2.2.0",
-                "hyperf/macroable": "~2.2.0",
-                "hyperf/server": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "nikic/fast-route": "^1.3",
-                "php": ">=7.2",
-                "psr/container": "^1.0|^2.0"
-            },
-            "suggest": {
-                "hyperf/di": "Required to use annotations."
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\HttpServer\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/json-rpc",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/json-rpc.git",
-                "reference": "bcd5b395edb4a4d237fbfbc08cb187cbea8088b5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/json-rpc/zipball/bcd5b395edb4a4d237fbfbc08cb187cbea8088b5",
-                "reference": "bcd5b395edb4a4d237fbfbc08cb187cbea8088b5",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/contract": "~2.2.0",
-                "hyperf/http-message": "~2.2.0",
-                "hyperf/load-balancer": "~2.2.0",
-                "hyperf/rpc": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2",
-                "psr/container": "^1.0|^2.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": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/load-balancer",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/load-balancer.git",
-                "reference": "aa7dfcf274db9905aaf8a54bd88067b1e9170c28"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/load-balancer/zipball/aa7dfcf274db9905aaf8a54bd88067b1e9170c28",
-                "reference": "aa7dfcf274db9905aaf8a54bd88067b1e9170c28",
-                "shasum": ""
-            },
-            "require": {
-                "markrogoyski/math-php": "^2.0",
-                "php": ">=7.2"
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\LoadBalancer\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/logger",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/logger.git",
-                "reference": "f19929efaeca4aba2b91e7452f4f1b3245bfac51"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/logger/zipball/f19929efaeca4aba2b91e7452f4f1b3245bfac51",
-                "reference": "f19929efaeca4aba2b91e7452f4f1b3245bfac51",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/contract": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "monolog/monolog": "^2.0",
-                "php": ">=7.2",
-                "psr/container": "^1.0|^2.0",
-                "psr/log": "^1.0|^2.0|^3.0"
-            },
-            "conflict": {
-                "monolog/monolog": ">=2.6.0"
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\Logger\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/macroable",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/macroable.git",
-                "reference": "e4e1b3ed614a5a9d4c24a48b0b3a554eb712af9f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/macroable/zipball/e4e1b3ed614a5a9d4c24a48b0b3a554eb712af9f",
-                "reference": "e4e1b3ed614a5a9d4c24a48b0b3a554eb712af9f",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/memory",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/memory.git",
-                "reference": "8adfac46a0f52385a4ad2e8bc4f956c34cb6f25e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/memory/zipball/8adfac46a0f52385a4ad2e8bc4f956c34cb6f25e",
-                "reference": "8adfac46a0f52385a4ad2e8bc4f956c34cb6f25e",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2"
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\Memory\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/model-cache",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/model-cache.git",
-                "reference": "f1e4148da7f6dc4b5eae74594311e53674fd532d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/model-cache/zipball/f1e4148da7f6dc4b5eae74594311e53674fd532d",
-                "reference": "f1e4148da7f6dc4b5eae74594311e53674fd532d",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/contract": "~2.2.0",
-                "hyperf/db-connection": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2",
-                "psr/container": "^1.0|^2.0",
-                "psr/simple-cache": "^1.0"
-            },
-            "suggest": {
-                "hyperf/event": "Required to use DeleteCacheListener."
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\ModelCache\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Hyperf\\ModelCache\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "A model cache component for hyperf.",
-            "homepage": "https://hyperf.io",
-            "keywords": [
-                "hyperf",
-                "model-cache",
-                "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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/model-listener",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/model-listener.git",
-                "reference": "0ac64b517db0d9e192650cd70f81a2962cd54e63"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/model-listener/zipball/0ac64b517db0d9e192650cd70f81a2962cd54e63",
-                "reference": "0ac64b517db0d9e192650cd70f81a2962cd54e63",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/contract": "~2.2.0",
-                "hyperf/database": "~2.2.0",
-                "hyperf/di": "~2.2.0",
-                "hyperf/event": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2",
-                "psr/container": "^1.0|^2.0"
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\ModelListener\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/paginator",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/paginator.git",
-                "reference": "dc9429ecbd579ef54fa81be9c1de149248f87d0a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/paginator/zipball/dc9429ecbd579ef54fa81be9c1de149248f87d0a",
-                "reference": "dc9429ecbd579ef54fa81be9c1de149248f87d0a",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/contract": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2"
-            },
-            "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": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/pool",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/pool.git",
-                "reference": "b66965453f404f09570a166e9c103a074d2dbd4e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/pool/zipball/b66965453f404f09570a166e9c103a074d2dbd4e",
-                "reference": "b66965453f404f09570a166e9c103a074d2dbd4e",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/contract": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2",
-                "psr/container": "^1.0|^2.0"
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\Pool\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/process",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/process.git",
-                "reference": "a93b2a4bf0455e3f639649046705e7b3b6ccd137"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/process/zipball/a93b2a4bf0455e3f639649046705e7b3b6ccd137",
-                "reference": "a93b2a4bf0455e3f639649046705e7b3b6ccd137",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/contract": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2",
-                "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": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/redis",
-            "version": "v2.2.37",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/redis.git",
-                "reference": "89f6c0063c69dc27adb094277947af30d2e59ad0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/redis/zipball/89f6c0063c69dc27adb094277947af30d2e59ad0",
-                "reference": "89f6c0063c69dc27adb094277947af30d2e59ad0",
-                "shasum": ""
-            },
-            "require": {
-                "ext-redis": "*",
-                "hyperf/contract": "~2.2.0",
-                "hyperf/pool": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2",
-                "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": "2.2-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"
-            },
-            "time": "2023-02-04T09:57:22+00:00"
-        },
-        {
-            "name": "hyperf/rpc",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/rpc.git",
-                "reference": "5d8dafe3d1787fc9af8a57b788e57d70bad1472f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/rpc/zipball/5d8dafe3d1787fc9af8a57b788e57d70bad1472f",
-                "reference": "5d8dafe3d1787fc9af8a57b788e57d70bad1472f",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/contract": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2"
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": [],
-                "branch-alias": {
-                    "dev-master": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/rpc-client",
-            "version": "v2.2.35",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/rpc-client.git",
-                "reference": "f5a44fd2ef597eca0de5208c6cf3ebcc1caa0859"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/rpc-client/zipball/f5a44fd2ef597eca0de5208c6cf3ebcc1caa0859",
-                "reference": "f5a44fd2ef597eca0de5208c6cf3ebcc1caa0859",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/load-balancer": "~2.2.0",
-                "hyperf/rpc": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2",
-                "psr/container": "^1.0|^2.0"
-            },
-            "suggest": {
-                "hyperf/di": "For better container experience.",
-                "hyperf/pool": "Required to use connection pool.",
-                "hyperf/service-governance": "Required to fetch the nodes info from service governance."
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\RpcClient\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Hyperf\\RpcClient\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "An abstract rpc server component for Hyperf.",
-            "homepage": "https://hyperf.io",
-            "keywords": [
-                "hyperf",
-                "json-rpc",
-                "php",
-                "rpc",
-                "rpc-client",
-                "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"
-            },
-            "time": "2022-08-10T12:58:39+00:00"
-        },
-        {
-            "name": "hyperf/rpc-server",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/rpc-server.git",
-                "reference": "e0416764f4f0a6f15ca64f52eed1f3da3d1d97d5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/rpc-server/zipball/e0416764f4f0a6f15ca64f52eed1f3da3d1d97d5",
-                "reference": "e0416764f4f0a6f15ca64f52eed1f3da3d1d97d5",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/http-server": "~2.2.0",
-                "hyperf/rpc": "~2.2.0",
-                "php": ">=7.2"
-            },
-            "suggest": {
-                "hyperf/di": "Required to use annotations."
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\RpcServer\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/server",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/server.git",
-                "reference": "1d3364520e37777a7ed83d8bc1597da42f8d6c1b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/server/zipball/1d3364520e37777a7ed83d8bc1597da42f8d6c1b",
-                "reference": "1d3364520e37777a7ed83d8bc1597da42f8d6c1b",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/contract": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2",
-                "psr/container": "^1.0|^2.0",
-                "psr/event-dispatcher": "^1.0",
-                "psr/log": "^1.0|^2.0|^3.0",
-                "symfony/console": "^5.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": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/service-governance",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/service-governance.git",
-                "reference": "047124ad8bba104bdb72f7094e242de472ed15ed"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/service-governance/zipball/047124ad8bba104bdb72f7094e242de472ed15ed",
-                "reference": "047124ad8bba104bdb72f7094e242de472ed15ed",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/consul": "~2.2.0",
-                "hyperf/contract": "~2.2.0",
-                "php": ">=7.2"
-            },
-            "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": "2.2-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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/translation",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/translation.git",
-                "reference": "66c018e6e1605a446db212b0d3905e1d816dba77"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/translation/zipball/66c018e6e1605a446db212b0d3905e1d816dba77",
-                "reference": "66c018e6e1605a446db212b0d3905e1d816dba77",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/contract": "~2.2.0",
-                "hyperf/macroable": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2",
-                "psr/container": "^1.0|^2.0"
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\Translation\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-dev"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "src/Functions.php"
-                ],
-                "psr-4": {
-                    "Hyperf\\Translation\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "An independent translation component, forked by illuminate/translation.",
-            "keywords": [
-                "hyperf",
-                "translation"
-            ],
-            "support": {
-                "issues": "https://github.com/hyperf/translation/issues",
-                "source": "https://github.com/hyperf/translation/tree/v2.2.33"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/utils",
-            "version": "v2.2.34",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/utils.git",
-                "reference": "9c8519392166a6c8057cc52f7d02e1ac638581f5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/utils/zipball/9c8519392166a6c8057cc52f7d02e1ac638581f5",
-                "reference": "9c8519392166a6c8057cc52f7d02e1ac638581f5",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/inflector": "^2.0",
-                "hyperf/context": "~2.2.0",
-                "hyperf/contract": "~2.2.0",
-                "hyperf/engine": "^1.1",
-                "hyperf/macroable": "~2.2.0",
-                "php": ">=7.2"
-            },
-            "suggest": {
-                "ext-swoole": "Required to use methods related to swoole (>=4.5).",
-                "hyperf/di": "Required to use ExceptionNormalizer",
-                "nikic/php-parser": "Required to use PhpParser. (^4.0)",
-                "symfony/property-access": "Required to use SymfonyNormalizer (^5.0)",
-                "symfony/serializer": "Required to use SymfonyNormalizer (^5.0)",
-                "symfony/var-dumper": "Required to use the dd function (^5.0)."
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\Utils\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-dev"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "src/Functions.php"
-                ],
-                "psr-4": {
-                    "Hyperf\\Utils\\": "src/"
-                }
-            },
-            "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"
-            },
-            "time": "2022-07-21T05:42:54+00:00"
-        },
-        {
-            "name": "hyperf/validation",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/validation.git",
-                "reference": "d4513923ed4cac88b4b5368bc6497b460465c1e0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/validation/zipball/d4513923ed4cac88b4b5368bc6497b460465c1e0",
-                "reference": "d4513923ed4cac88b4b5368bc6497b460465c1e0",
-                "shasum": ""
-            },
-            "require": {
-                "egulias/email-validator": "^3.0",
-                "hyperf/contract": "~2.2.0",
-                "hyperf/database": "~2.2.0",
-                "hyperf/di": "~2.2.0",
-                "hyperf/framework": "~2.2.0",
-                "hyperf/http-server": "~2.2.0",
-                "hyperf/macroable": "~2.2.0",
-                "hyperf/translation": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "nesbot/carbon": "^2.21",
-                "php": ">=7.2",
-                "psr/container": "^1.0|^2.0",
-                "psr/event-dispatcher": "^1.0",
-                "psr/http-message": "^1.0"
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\Validation\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Hyperf\\Validation\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "hyperf validation",
-            "keywords": [
-                "hyperf",
-                "validation"
-            ],
-            "support": {
-                "issues": "https://github.com/hyperf/validation/issues",
-                "source": "https://github.com/hyperf/validation/tree/v2.2.33"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "illuminate/collections",
-            "version": "v8.83.27",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/illuminate/collections.git",
-                "reference": "705a4e1ef93cd492c45b9b3e7911cccc990a07f4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/illuminate/collections/zipball/705a4e1ef93cd492c45b9b3e7911cccc990a07f4",
-                "reference": "705a4e1ef93cd492c45b9b3e7911cccc990a07f4",
-                "shasum": ""
-            },
-            "require": {
-                "illuminate/contracts": "^8.0",
-                "illuminate/macroable": "^8.0",
-                "php": "^7.3|^8.0"
-            },
-            "suggest": {
-                "symfony/var-dumper": "Required to use the dump method (^5.4)."
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "8.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": "2022-06-23T15:29:49+00:00"
-        },
-        {
-            "name": "illuminate/contracts",
-            "version": "v8.83.27",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/illuminate/contracts.git",
-                "reference": "5e0fd287a1b22a6b346a9f7cd484d8cf0234585d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/illuminate/contracts/zipball/5e0fd287a1b22a6b346a9f7cd484d8cf0234585d",
-                "reference": "5e0fd287a1b22a6b346a9f7cd484d8cf0234585d",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3|^8.0",
-                "psr/container": "^1.0",
-                "psr/simple-cache": "^1.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "8.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": "2022-01-13T14:47:47+00:00"
-        },
-        {
-            "name": "illuminate/macroable",
-            "version": "v8.83.27",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/illuminate/macroable.git",
-                "reference": "aed81891a6e046fdee72edd497f822190f61c162"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/illuminate/macroable/zipball/aed81891a6e046fdee72edd497f822190f61c162",
-                "reference": "aed81891a6e046fdee72edd497f822190f61c162",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3|^8.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "8.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": "2021-11-16T13:57:03+00:00"
-        },
-        {
-            "name": "illuminate/support",
-            "version": "v8.83.27",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/illuminate/support.git",
-                "reference": "1c79242468d3bbd9a0f7477df34f9647dde2a09b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/illuminate/support/zipball/1c79242468d3bbd9a0f7477df34f9647dde2a09b",
-                "reference": "1c79242468d3bbd9a0f7477df34f9647dde2a09b",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/inflector": "^1.4|^2.0",
-                "ext-json": "*",
-                "ext-mbstring": "*",
-                "illuminate/collections": "^8.0",
-                "illuminate/contracts": "^8.0",
-                "illuminate/macroable": "^8.0",
-                "nesbot/carbon": "^2.53.1",
-                "php": "^7.3|^8.0",
-                "voku/portable-ascii": "^1.6.1"
-            },
-            "conflict": {
-                "tightenco/collect": "<5.5.33"
-            },
-            "suggest": {
-                "illuminate/filesystem": "Required to use the composer class (^8.0).",
-                "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^1.3|^2.0.2).",
-                "ramsey/uuid": "Required to use Str::uuid() (^4.2.2).",
-                "symfony/process": "Required to use the composer class (^5.4).",
-                "symfony/var-dumper": "Required to use the dd function (^5.4).",
-                "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)."
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "8.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": "2022-09-21T21:30:03+00:00"
-        },
-        {
-            "name": "jean85/pretty-package-versions",
-            "version": "2.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Jean85/pretty-package-versions.git",
-                "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/3c4e5f62ba8d7de1734312e4fff32f67a8daaf10",
-                "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10",
-                "shasum": ""
-            },
-            "require": {
-                "composer-runtime-api": "^2.1.0",
-                "php": "^7.4|^8.0"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^3.2",
-                "jean85/composer-provided-replaced-stub-package": "^1.0",
-                "phpstan/phpstan": "^1.4",
-                "phpunit/phpunit": "^7.5|^8.5|^9.6",
-                "vimeo/psalm": "^4.3 || ^5.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Jean85\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Alessandro Lai",
-                    "email": "alessandro.lai85@gmail.com"
-                }
-            ],
-            "description": "A library to get pretty versions strings of installed dependencies",
-            "keywords": [
-                "composer",
-                "package",
-                "release",
-                "versions"
-            ],
-            "support": {
-                "issues": "https://github.com/Jean85/pretty-package-versions/issues",
-                "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.0"
-            },
-            "time": "2024-11-18T16:19:46+00:00"
-        },
-        {
-            "name": "jt9ge/hyperf-telegram-bot-sdk",
-            "version": "v2.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/jt9ge/hyperf-telegram-bot-sdk.git",
-                "reference": "13274e8bd0d38bd7117b3c05bb04f41f11fdc95b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/jt9ge/hyperf-telegram-bot-sdk/zipball/13274e8bd0d38bd7117b3c05bb04f41f11fdc95b",
-                "reference": "13274e8bd0d38bd7117b3c05bb04f41f11fdc95b",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/guzzle": "~2.2.0",
-                "illuminate/support": "^5.5 || ^6.0 || ^7.0 || ^8.0",
-                "league/event": "^2.1",
-                "php": "^8.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.5"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Telegram\\Bot\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "jt9ge",
-                    "email": "jiutong9ge@gmail.com",
-                    "homepage": "https://github.com/jt9ge"
-                }
-            ],
-            "description": "Telegram 机器人 API SDK(Hyperf 2.2.x版)",
-            "homepage": "https://github.com/jt9ge/hyperf-telegram-bot-sdk",
-            "keywords": [
-                "hyperf",
-                "telegram",
-                "telegram bot",
-                "telegram bot api",
-                "telegram php",
-                "telegram sdk"
-            ],
-            "support": {
-                "issues": "https://github.com/jt9ge/hyperf-telegram-bot-sdk/issues",
-                "source": "https://github.com/jt9ge/hyperf-telegram-bot-sdk/tree/v2.2.0"
-            },
-            "time": "2021-11-01T12:39:14+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": ""
-            },
-            "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"
-                }
-            ],
-            "abandoned": "symfony/mime",
-            "time": "2023-11-02T16:47:19+00:00"
-        },
-        {
-            "name": "laminas/laminas-stdlib",
-            "version": "3.16.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/laminas/laminas-stdlib.git",
-                "reference": "f4f773641807c7ccee59b758bfe4ac4ba33ecb17"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/f4f773641807c7ccee59b758bfe4ac4ba33ecb17",
-                "reference": "f4f773641807c7ccee59b758bfe4ac4ba33ecb17",
-                "shasum": ""
-            },
-            "require": {
-                "php": "~8.0.0 || ~8.1.0 || ~8.2.0"
-            },
-            "conflict": {
-                "zendframework/zend-stdlib": "*"
-            },
-            "require-dev": {
-                "laminas/laminas-coding-standard": "^2.4.0",
-                "phpbench/phpbench": "^1.2.7",
-                "phpunit/phpunit": "^9.5.26",
-                "psalm/plugin-phpunit": "^0.18.0",
-                "vimeo/psalm": "^5.0.0"
-            },
-            "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": "2022-12-03T18:48:01+00:00"
-        },
-        {
-            "name": "lcobucci/clock",
-            "version": "2.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/lcobucci/clock.git",
-                "reference": "fb533e093fd61321bfcbac08b131ce805fe183d3"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/lcobucci/clock/zipball/fb533e093fd61321bfcbac08b131ce805fe183d3",
-                "reference": "fb533e093fd61321bfcbac08b131ce805fe183d3",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^8.0",
-                "stella-maris/clock": "^0.1.4"
-            },
-            "require-dev": {
-                "infection/infection": "^0.26",
-                "lcobucci/coding-standard": "^8.0",
-                "phpstan/extension-installer": "^1.1",
-                "phpstan/phpstan": "^0.12",
-                "phpstan/phpstan-deprecation-rules": "^0.12",
-                "phpstan/phpstan-phpunit": "^0.12",
-                "phpstan/phpstan-strict-rules": "^0.12",
-                "phpunit/phpunit": "^9.5"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Lcobucci\\Clock\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Luís Cobucci",
-                    "email": "lcobucci@gmail.com"
-                }
-            ],
-            "description": "Yet another clock abstraction",
-            "support": {
-                "issues": "https://github.com/lcobucci/clock/issues",
-                "source": "https://github.com/lcobucci/clock/tree/2.2.0"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/lcobucci",
-                    "type": "github"
-                },
-                {
-                    "url": "https://www.patreon.com/lcobucci",
-                    "type": "patreon"
-                }
-            ],
-            "time": "2022-04-19T19:34:17+00:00"
-        },
-        {
-            "name": "lcobucci/jwt",
-            "version": "4.1.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/lcobucci/jwt.git",
-                "reference": "fe2d89f2eaa7087af4aa166c6f480ef04e000582"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/lcobucci/jwt/zipball/fe2d89f2eaa7087af4aa166c6f480ef04e000582",
-                "reference": "fe2d89f2eaa7087af4aa166c6f480ef04e000582",
-                "shasum": ""
-            },
-            "require": {
-                "ext-hash": "*",
-                "ext-json": "*",
-                "ext-mbstring": "*",
-                "ext-openssl": "*",
-                "ext-sodium": "*",
-                "lcobucci/clock": "^2.0",
-                "php": "^7.4 || ^8.0"
-            },
-            "require-dev": {
-                "infection/infection": "^0.21",
-                "lcobucci/coding-standard": "^6.0",
-                "mikey179/vfsstream": "^1.6.7",
-                "phpbench/phpbench": "^1.0",
-                "phpstan/extension-installer": "^1.0",
-                "phpstan/phpstan": "^0.12",
-                "phpstan/phpstan-deprecation-rules": "^0.12",
-                "phpstan/phpstan-phpunit": "^0.12",
-                "phpstan/phpstan-strict-rules": "^0.12",
-                "phpunit/php-invoker": "^3.1",
-                "phpunit/phpunit": "^9.5"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Lcobucci\\JWT\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Luís Cobucci",
-                    "email": "lcobucci@gmail.com",
-                    "role": "Developer"
-                }
-            ],
-            "description": "A simple library to work with JSON Web Token and JSON Web Signature",
-            "keywords": [
-                "JWS",
-                "jwt"
-            ],
-            "support": {
-                "issues": "https://github.com/lcobucci/jwt/issues",
-                "source": "https://github.com/lcobucci/jwt/tree/4.1.5"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/lcobucci",
-                    "type": "github"
-                },
-                {
-                    "url": "https://www.patreon.com/lcobucci",
-                    "type": "patreon"
-                }
-            ],
-            "time": "2021-09-28T19:34:56+00:00"
-        },
-        {
-            "name": "league/event",
-            "version": "2.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/thephpleague/event.git",
-                "reference": "d2cc124cf9a3fab2bb4ff963307f60361ce4d119"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/event/zipball/d2cc124cf9a3fab2bb4ff963307f60361ce4d119",
-                "reference": "d2cc124cf9a3fab2bb4ff963307f60361ce4d119",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.4.0"
-            },
-            "require-dev": {
-                "henrikbjorn/phpspec-code-coverage": "~1.0.1",
-                "phpspec/phpspec": "^2.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "League\\Event\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Frank de Jonge",
-                    "email": "info@frenky.net"
-                }
-            ],
-            "description": "Event package",
-            "keywords": [
-                "emitter",
-                "event",
-                "listener"
-            ],
-            "support": {
-                "issues": "https://github.com/thephpleague/event/issues",
-                "source": "https://github.com/thephpleague/event/tree/master"
-            },
-            "time": "2018-11-26T11:52:41+00:00"
-        },
-        {
-            "name": "lmz/hyperf-mongodb",
-            "version": "v2.2.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/liumingzhij26/hyperf-mongodb.git",
-                "reference": "947539e4b5827700ff73bbac1eff721bd64280cf"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/liumingzhij26/hyperf-mongodb/zipball/947539e4b5827700ff73bbac1eff721bd64280cf",
-                "reference": "947539e4b5827700ff73bbac1eff721bd64280cf",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/contract": "~2.2.0",
-                "hyperf/pool": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "mongodb/mongodb": "^1.5",
-                "php": ">=7.3"
-            },
-            "suggest": {
-                "hyperf/di": "Create the MongodbPool via dependency injection."
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\Mongodb\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Hyperf\\Mongodb\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "A mongodb component for hyperf.",
-            "keywords": [
-                "hyperf",
-                "mongodb",
-                "php",
-                "pool"
-            ],
-            "support": {
-                "issues": "https://github.com/liumingzhij26/hyperf-mongodb/issues",
-                "source": "https://github.com/liumingzhij26/hyperf-mongodb/tree/v2.2.1"
-            },
-            "time": "2021-10-24T09:02:32+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": ""
-            },
-            "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": "mongodb/mongodb",
-            "version": "1.12.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/mongodb/mongo-php-library.git",
-                "reference": "e4a7594ac4b31635fa77455c4038a7013024ba28"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/mongodb/mongo-php-library/zipball/e4a7594ac4b31635fa77455c4038a7013024ba28",
-                "reference": "e4a7594ac4b31635fa77455c4038a7013024ba28",
-                "shasum": ""
-            },
-            "require": {
-                "ext-hash": "*",
-                "ext-json": "*",
-                "ext-mongodb": "^1.13.0",
-                "jean85/pretty-package-versions": "^1.2 || ^2.0.1",
-                "php": "^7.2 || ^8.0",
-                "symfony/polyfill-php80": "^1.19"
-            },
-            "require-dev": {
-                "doctrine/coding-standard": "^9.0",
-                "squizlabs/php_codesniffer": "^3.6",
-                "symfony/phpunit-bridge": "^5.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.12.x-dev"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "src/functions.php"
-                ],
-                "psr-4": {
-                    "MongoDB\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "Andreas Braun",
-                    "email": "andreas.braun@mongodb.com"
-                },
-                {
-                    "name": "Jeremy Mikola",
-                    "email": "jmikola@gmail.com"
-                }
-            ],
-            "description": "MongoDB driver library",
-            "homepage": "https://jira.mongodb.org/browse/PHPLIB",
-            "keywords": [
-                "database",
-                "driver",
-                "mongodb",
-                "persistence"
-            ],
-            "support": {
-                "issues": "https://github.com/mongodb/mongo-php-library/issues",
-                "source": "https://github.com/mongodb/mongo-php-library/tree/1.12.0"
-            },
-            "time": "2022-03-23T20:18:39+00:00"
-        },
-        {
-            "name": "monolog/monolog",
-            "version": "2.5.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/monolog.git",
-                "reference": "4192345e260f1d51b365536199744b987e160edc"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/4192345e260f1d51b365536199744b987e160edc",
-                "reference": "4192345e260f1d51b365536199744b987e160edc",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2",
-                "psr/log": "^1.0.1 || ^2.0 || ^3.0"
-            },
-            "provide": {
-                "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0"
-            },
-            "require-dev": {
-                "aws/aws-sdk-php": "^2.4.9 || ^3.0",
-                "doctrine/couchdb": "~1.0@dev",
-                "elasticsearch/elasticsearch": "^7",
-                "graylog2/gelf-php": "^1.4.2",
-                "mongodb/mongodb": "^1.8",
-                "php-amqplib/php-amqplib": "~2.4 || ^3",
-                "php-console/php-console": "^3.1.3",
-                "phpspec/prophecy": "^1.6.1",
-                "phpstan/phpstan": "^0.12.91",
-                "phpunit/phpunit": "^8.5",
-                "predis/predis": "^1.1",
-                "rollbar/rollbar": "^1.3 || ^2 || ^3",
-                "ruflin/elastica": ">=0.90@dev",
-                "swiftmailer/swiftmailer": "^5.3|^6.0"
-            },
-            "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",
-                "php-console/php-console": "Allow sending log messages to Google Chrome",
-                "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": "2.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/2.5.0"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/Seldaek",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-04-08T15:43:54+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": ""
-            },
-            "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": ""
-            },
-            "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": ""
-            },
-            "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": ""
-            },
-            "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": ""
-            },
-            "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.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-amqplib/php-amqplib.git",
-                "reference": "5c537cb724f2e181183c202e63f4303935344c5f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/5c537cb724f2e181183c202e63f4303935344c5f",
-                "reference": "5c537cb724f2e181183c202e63f4303935344c5f",
-                "shasum": ""
-            },
-            "require": {
-                "ext-mbstring": "*",
-                "ext-sockets": "*",
-                "php": "^7.1||^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.4.0"
-            },
-            "time": "2022-10-18T20:52:02+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": ""
-            },
-            "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": ""
-            },
-            "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": ""
-            },
-            "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": ""
-            },
-            "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": ""
-            },
-            "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": "1.1.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/container.git",
-                "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
-                "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.4.0"
-            },
-            "type": "library",
-            "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/1.1.2"
-            },
-            "time": "2021-11-05T16:50:12+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": ""
-            },
-            "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": ""
-            },
-            "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.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/http-factory.git",
-                "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
-                "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1",
-                "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": "PSR-17: 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"
-            },
-            "time": "2024-04-15T12:06:14+00:00"
-        },
-        {
-            "name": "psr/http-message",
-            "version": "1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/http-message.git",
-                "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
-                "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.2 || ^8.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Http\\Message\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://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/1.1"
-            },
-            "time": "2023-04-04T09:50:52+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": ""
-            },
-            "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": ""
-            },
-            "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": "2.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376",
-                "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.0.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0.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/2.0.0"
-            },
-            "time": "2021-07-14T16:41:46+00:00"
-        },
-        {
-            "name": "psr/simple-cache",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/simple-cache.git",
-                "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
-                "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\SimpleCache\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://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/master"
-            },
-            "time": "2017-10-23T01:57:42+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": ""
-            },
-            "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": "react/promise",
-            "version": "v3.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/reactphp/promise.git",
-                "reference": "8a164643313c71354582dc850b42b33fa12a4b63"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63",
-                "reference": "8a164643313c71354582dc850b42b33fa12a4b63",
-                "shasum": ""
-            },
-            "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.2.0"
-            },
-            "funding": [
-                {
-                    "url": "https://opencollective.com/reactphp",
-                    "type": "open_collective"
-                }
-            ],
-            "time": "2024-05-24T10:39:05+00:00"
-        },
-        {
-            "name": "stella-maris/clock",
-            "version": "0.1.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/stella-maris-solutions/clock.git",
-                "reference": "fa23ce16019289a18bb3446fdecd45befcdd94f8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/stella-maris-solutions/clock/zipball/fa23ce16019289a18bb3446fdecd45befcdd94f8",
-                "reference": "fa23ce16019289a18bb3446fdecd45befcdd94f8",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.0|^8.0",
-                "psr/clock": "^1.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "StellaMaris\\Clock\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Andreas Heigl",
-                    "role": "Maintainer"
-                }
-            ],
-            "description": "A pre-release of the proposed PSR-20 Clock-Interface",
-            "homepage": "https://gitlab.com/stella-maris/clock",
-            "keywords": [
-                "clock",
-                "datetime",
-                "point in time",
-                "psr20"
-            ],
-            "support": {
-                "source": "https://github.com/stella-maris-solutions/clock/tree/0.1.7"
-            },
-            "time": "2022-11-25T16:15:06+00:00"
-        },
-        {
-            "name": "symfony/console",
-            "version": "v5.4.11",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/console.git",
-                "reference": "535846c7ee6bc4dd027ca0d93220601456734b10"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/535846c7ee6bc4dd027ca0d93220601456734b10",
-                "reference": "535846c7ee6bc4dd027ca0d93220601456734b10",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php73": "^1.9",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/service-contracts": "^1.1|^2|^3",
-                "symfony/string": "^5.1|^6.0"
-            },
-            "conflict": {
-                "psr/log": ">=3",
-                "symfony/dependency-injection": "<4.4",
-                "symfony/dotenv": "<5.1",
-                "symfony/event-dispatcher": "<4.4",
-                "symfony/lock": "<4.4",
-                "symfony/process": "<4.4"
-            },
-            "provide": {
-                "psr/log-implementation": "1.0|2.0"
-            },
-            "require-dev": {
-                "psr/log": "^1|^2",
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
-                "symfony/lock": "^4.4|^5.0|^6.0",
-                "symfony/process": "^4.4|^5.0|^6.0",
-                "symfony/var-dumper": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "psr/log": "For using the console logger",
-                "symfony/event-dispatcher": "",
-                "symfony/lock": "",
-                "symfony/process": ""
-            },
-            "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/v5.4.11"
-            },
-            "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": "2022-07-22T10:42:43+00:00"
-        },
-        {
-            "name": "symfony/deprecation-contracts",
-            "version": "v3.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/deprecation-contracts.git",
-                "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c",
-                "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.0.2"
-            },
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "url": "https://github.com/symfony/contracts",
-                    "name": "symfony/contracts"
-                },
-                "branch-alias": {
-                    "dev-main": "3.0-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.0.2"
-            },
-            "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": "2022-01-02T09:55:41+00:00"
-        },
-        {
-            "name": "symfony/finder",
-            "version": "v5.4.45",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/finder.git",
-                "reference": "63741784cd7b9967975eec610b256eed3ede022b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/63741784cd7b9967975eec610b256eed3ede022b",
-                "reference": "63741784cd7b9967975eec610b256eed3ede022b",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "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/v5.4.45"
-            },
-            "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-28T13:32:08+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": ""
-            },
-            "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": ""
-            },
-            "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-idn",
-            "version": "v1.31.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-intl-idn.git",
-                "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773",
-                "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2",
-                "symfony/polyfill-intl-normalizer": "^1.10"
-            },
-            "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\\Idn\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Laurent Bassin",
-                    "email": "laurent@bassin.info"
-                },
-                {
-                    "name": "Trevor Rowbotham",
-                    "email": "trevor.rowbotham@pm.me"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "idn",
-                "intl",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-intl-idn/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": ""
-            },
-            "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": ""
-            },
-            "require": {
-                "php": ">=7.2"
-            },
-            "provide": {
-                "ext-mbstring": "*"
-            },
-            "suggest": {
-                "ext-mbstring": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "url": "https://github.com/symfony/polyfill",
-                    "name": "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-php73",
-            "version": "v1.31.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-php73.git",
-                "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
-                "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
-                "shasum": ""
-            },
-            "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\\Php73\\": ""
-                },
-                "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 7.3+ features to lower PHP versions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-php73/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": ""
-            },
-            "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": "v2.5.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/service-contracts.git",
-                "reference": "f37b419f7aea2e9abf10abd261832cace12e3300"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300",
-                "reference": "f37b419f7aea2e9abf10abd261832cace12e3300",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "psr/container": "^1.1",
-                "symfony/deprecation-contracts": "^2.1|^3"
-            },
-            "conflict": {
-                "ext-psr": "<1.1|>=2"
-            },
-            "suggest": {
-                "symfony/service-implementation": ""
-            },
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "url": "https://github.com/symfony/contracts",
-                    "name": "symfony/contracts"
-                },
-                "branch-alias": {
-                    "dev-main": "2.5-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Contracts\\Service\\": ""
-                }
-            },
-            "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/v2.5.4"
-            },
-            "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:11:13+00:00"
-        },
-        {
-            "name": "symfony/string",
-            "version": "v6.0.19",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/string.git",
-                "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/string/zipball/d9e72497367c23e08bf94176d2be45b00a9d232a",
-                "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.0.2",
-                "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.0"
-            },
-            "require-dev": {
-                "symfony/error-handler": "^5.4|^6.0",
-                "symfony/http-client": "^5.4|^6.0",
-                "symfony/translation-contracts": "^2.0|^3.0",
-                "symfony/var-exporter": "^5.4|^6.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.0.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": "2023-01-01T08:36:10+00:00"
-        },
-        {
-            "name": "symfony/translation",
-            "version": "v6.0.19",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/translation.git",
-                "reference": "9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation/zipball/9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f",
-                "reference": "9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.0.2",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/translation-contracts": "^2.3|^3.0"
-            },
-            "conflict": {
-                "symfony/config": "<5.4",
-                "symfony/console": "<5.4",
-                "symfony/dependency-injection": "<5.4",
-                "symfony/http-kernel": "<5.4",
-                "symfony/twig-bundle": "<5.4",
-                "symfony/yaml": "<5.4"
-            },
-            "provide": {
-                "symfony/translation-implementation": "2.3|3.0"
-            },
-            "require-dev": {
-                "psr/log": "^1|^2|^3",
-                "symfony/config": "^5.4|^6.0",
-                "symfony/console": "^5.4|^6.0",
-                "symfony/dependency-injection": "^5.4|^6.0",
-                "symfony/finder": "^5.4|^6.0",
-                "symfony/http-client-contracts": "^1.1|^2.0|^3.0",
-                "symfony/http-kernel": "^5.4|^6.0",
-                "symfony/intl": "^5.4|^6.0",
-                "symfony/polyfill-intl-icu": "^1.21",
-                "symfony/service-contracts": "^1.1.2|^2|^3",
-                "symfony/yaml": "^5.4|^6.0"
-            },
-            "suggest": {
-                "psr/log-implementation": "To use logging capability in translator",
-                "symfony/config": "",
-                "symfony/yaml": ""
-            },
-            "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.0.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": "2023-01-01T08:36:10+00:00"
-        },
-        {
-            "name": "symfony/translation-contracts",
-            "version": "v3.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/translation-contracts.git",
-                "reference": "acbfbb274e730e5a0236f619b6168d9dedb3e282"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/acbfbb274e730e5a0236f619b6168d9dedb3e282",
-                "reference": "acbfbb274e730e5a0236f619b6168d9dedb3e282",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.0.2"
-            },
-            "suggest": {
-                "symfony/translation-implementation": ""
-            },
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "url": "https://github.com/symfony/contracts",
-                    "name": "symfony/contracts"
-                },
-                "branch-alias": {
-                    "dev-main": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Contracts\\Translation\\": ""
-                }
-            },
-            "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.0.2"
-            },
-            "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": "2022-06-27T17:10:44+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": ""
-            },
-            "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": "1.6.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/voku/portable-ascii.git",
-                "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a",
-                "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a",
-                "shasum": ""
-            },
-            "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": "http://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/1.6.1"
-            },
-            "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": "2022-01-24T18:55:24+00:00"
-        },
-        {
-            "name": "zhuzhichao/ip-location-zh",
-            "version": "v2.4.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zhuzhichao/ip-location-zh.git",
-                "reference": "24b74242d96cb318824fa9b920f5476f2bba9a41"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zhuzhichao/ip-location-zh/zipball/24b74242d96cb318824fa9b920f5476f2bba9a41",
-                "reference": "24b74242d96cb318824fa9b920f5476f2bba9a41",
-                "shasum": ""
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.0"
-            },
-            "type": "library",
-            "extra": {
-                "laravel": {
-                    "aliases": {
-                        "Ip": "Zhuzhichao\\IpLocationZh\\Ip"
-                    }
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Zhuzhichao\\IpLocationZh\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "zhuzhichao",
-                    "email": "me@zhuzhichao.com"
-                }
-            ],
-            "description": "get the ip's location info with Chinese",
-            "keywords": [
-                "Chinese",
-                "IP",
-                "location"
-            ],
-            "support": {
-                "issues": "https://github.com/zhuzhichao/ip-location-zh/issues",
-                "source": "https://github.com/zhuzhichao/ip-location-zh/tree/v2.4.5"
-            },
-            "time": "2023-08-29T01:18:10+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": ""
-            },
-            "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.1.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/pcre.git",
-                "reference": "04229f163664973f68f38f6f73d917799168ef24"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/pcre/zipball/04229f163664973f68f38f6f73d917799168ef24",
-                "reference": "04229f163664973f68f38f6f73d917799168ef24",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.4 || ^8.0"
-            },
-            "require-dev": {
-                "phpstan/phpstan": "^1.3",
-                "phpstan/phpstan-strict-rules": "^1.1",
-                "symfony/phpunit-bridge": "^5"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "3.x-dev"
-                }
-            },
-            "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.1.4"
-            },
-            "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-05-27T13:40:54+00:00"
-        },
-        {
-            "name": "composer/semver",
-            "version": "3.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/semver.git",
-                "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
-                "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.2 || ^7.0 || ^8.0"
-            },
-            "require-dev": {
-                "phpstan/phpstan": "^1.11",
-                "symfony/phpunit-bridge": "^3 || ^7"
-            },
-            "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.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": "2024-09-19T14:15:21+00:00"
-        },
-        {
-            "name": "composer/xdebug-handler",
-            "version": "3.0.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/xdebug-handler.git",
-                "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef",
-                "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef",
-                "shasum": ""
-            },
-            "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",
-                "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5"
-            },
-            "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": "ircs://irc.libera.chat:6697/composer",
-                "issues": "https://github.com/composer/xdebug-handler/issues",
-                "source": "https://github.com/composer/xdebug-handler/tree/3.0.5"
-            },
-            "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-05-06T16:37:16+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": ""
-            },
-            "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.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/theofidry/cpu-core-counter.git",
-                "reference": "8520451a140d3f46ac33042715115e290cf5785f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f",
-                "reference": "8520451a140d3f46ac33042715115e290cf5785f",
-                "shasum": ""
-            },
-            "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.2.0"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/theofidry",
-                    "type": "github"
-                }
-            ],
-            "time": "2024-08-06T10:04:20+00:00"
-        },
-        {
-            "name": "friendsofphp/php-cs-fixer",
-            "version": "v3.70.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
-                "reference": "2ecd5aae0edc937f0d5aa4a22d1d705c6b2e084e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/2ecd5aae0edc937f0d5aa4a22d1d705c6b2e084e",
-                "reference": "2ecd5aae0edc937f0d5aa4a22d1d705c6b2e084e",
-                "shasum": ""
-            },
-            "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.2",
-                "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.1 || ^6.0 || ^7.0",
-                "symfony/console": "^5.4 || ^6.4 || ^7.0",
-                "symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0",
-                "symfony/filesystem": "^5.4 || ^6.4 || ^7.0",
-                "symfony/finder": "^5.4 || ^6.4 || ^7.0",
-                "symfony/options-resolver": "^5.4 || ^6.4 || ^7.0",
-                "symfony/polyfill-mbstring": "^1.31",
-                "symfony/polyfill-php80": "^1.31",
-                "symfony/polyfill-php81": "^1.31",
-                "symfony/process": "^5.4 || ^6.4 || ^7.2",
-                "symfony/stopwatch": "^5.4 || ^6.4 || ^7.0"
-            },
-            "require-dev": {
-                "facile-it/paraunit": "^1.3.1 || ^2.5",
-                "infection/infection": "^0.29.10",
-                "justinrainbow/json-schema": "^5.3 || ^6.0",
-                "keradus/cli-executor": "^2.1",
-                "mikey179/vfsstream": "^1.6.12",
-                "php-coveralls/php-coveralls": "^2.7",
-                "php-cs-fixer/accessible-object": "^1.1",
-                "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6",
-                "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6",
-                "phpunit/phpunit": "^9.6.22 || ^10.5.45 || ^11.5.7",
-                "symfony/var-dumper": "^5.4.48 || ^6.4.18 || ^7.2.0",
-                "symfony/yaml": "^5.4.45 || ^6.4.18 || ^7.2.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.70.0"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/keradus",
-                    "type": "github"
-                }
-            ],
-            "time": "2025-02-22T23:30:51+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": ""
-            },
-            "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": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/devtool.git",
-                "reference": "f447311bf7507ff2b13658250ef3bcff7a9bc881"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/devtool/zipball/f447311bf7507ff2b13658250ef3bcff7a9bc881",
-                "reference": "f447311bf7507ff2b13658250ef3bcff7a9bc881",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/command": "~2.2.0",
-                "hyperf/contract": "~2.2.0",
-                "hyperf/di": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2"
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\Devtool\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-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": [
-                "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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/ide-helper",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/ide-helper.git",
-                "reference": "e7e26af552f7cf5512c357df9604ff9aa77ed3f3"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/ide-helper/zipball/e7e26af552f7cf5512c357df9604ff9aa77ed3f3",
-                "reference": "e7e26af552f7cf5512c357df9604ff9aa77ed3f3",
-                "shasum": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.2-dev"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "IDE help files for Hyperf.",
-            "homepage": "https://hyperf.io",
-            "keywords": [
-                "hyperf",
-                "ide-helper",
-                "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"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/testing",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/testing.git",
-                "reference": "63726e3b4e999a96dd4dd62a54f8b2f8f48f850e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/testing/zipball/63726e3b4e999a96dd4dd62a54f8b2f8f48f850e",
-                "reference": "63726e3b4e999a96dd4dd62a54f8b2f8f48f850e",
-                "shasum": ""
-            },
-            "require": {
-                "hyperf/contract": "~2.2.0",
-                "hyperf/http-message": "~2.2.0",
-                "hyperf/http-server": "~2.2.0",
-                "hyperf/utils": "~2.2.0",
-                "php": ">=7.2",
-                "phpunit/phpunit": "^9.5",
-                "psr/container": "^1.0|^2.0"
-            },
-            "bin": [
-                "co-phpunit"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Hyperf\\Testing\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Testing for hyperf",
-            "keywords": [
-                "php",
-                "swoole",
-                "testing"
-            ],
-            "support": {
-                "source": "https://github.com/hyperf/testing/tree/v2.2.33"
-            },
-            "time": "2022-05-24T13:10:54+00:00"
-        },
-        {
-            "name": "hyperf/watcher",
-            "version": "v2.2.33",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hyperf/watcher.git",
-                "reference": "bee6a3dbc67a355fc608d44242f1be8cfec97b2f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hyperf/watcher/zipball/bee6a3dbc67a355fc608d44242f1be8cfec97b2f",
-                "reference": "bee6a3dbc67a355fc608d44242f1be8cfec97b2f",
-                "shasum": ""
-            },
-            "require": {
-                "ext-swoole": ">=4.5",
-                "hyperf/command": "~2.2.0",
-                "hyperf/di": "~2.2.0",
-                "hyperf/framework": "~2.2.0",
-                "php": ">=7.2"
-            },
-            "type": "library",
-            "extra": {
-                "hyperf": {
-                    "config": "Hyperf\\Watcher\\ConfigProvider"
-                },
-                "branch-alias": {
-                    "dev-master": "2.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Hyperf\\Watcher\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Hot reload watcher for Hyperf",
-            "keywords": [
-                "hyperf",
-                "php"
-            ],
-            "support": {
-                "issues": "https://github.com/hyperf/watcher/issues",
-                "source": "https://github.com/hyperf/watcher/tree/v2.2.33"
-            },
-            "time": "2022-05-24T13:10:54+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": ""
-            },
-            "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": ""
-            },
-            "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": "2.0.4",
-            "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": ""
-            },
-            "require": {
-                "ext-dom": "*",
-                "ext-libxml": "*",
-                "ext-phar": "*",
-                "ext-xmlwriter": "*",
-                "phar-io/version": "^3.0.1",
-                "php": "^7.2 || ^8.0"
-            },
-            "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": ""
-            },
-            "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": "0.12.100",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "48236ddf823547081b2b153d1cd2994b784328c3"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/48236ddf823547081b2b153d1cd2994b784328c3",
-                "reference": "48236ddf823547081b2b153d1cd2994b784328c3",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1|^8.0"
-            },
-            "conflict": {
-                "phpstan/phpstan-shim": "*"
-            },
-            "bin": [
-                "phpstan",
-                "phpstan.phar"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "0.12-dev"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "PHPStan - PHP Static Analysis Tool",
-            "support": {
-                "issues": "https://github.com/phpstan/phpstan/issues",
-                "source": "https://github.com/phpstan/phpstan/tree/0.12.100"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/ondrejmirtes",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/phpstan",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-11-01T09:52:08+00:00"
-        },
-        {
-            "name": "phpunit/php-code-coverage",
-            "version": "9.2.32",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5",
-                "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5",
-                "shasum": ""
-            },
-            "require": {
-                "ext-dom": "*",
-                "ext-libxml": "*",
-                "ext-xmlwriter": "*",
-                "nikic/php-parser": "^4.19.1 || ^5.1.0",
-                "php": ">=7.3",
-                "phpunit/php-file-iterator": "^3.0.6",
-                "phpunit/php-text-template": "^2.0.4",
-                "sebastian/code-unit-reverse-lookup": "^2.0.3",
-                "sebastian/complexity": "^2.0.3",
-                "sebastian/environment": "^5.1.5",
-                "sebastian/lines-of-code": "^1.0.4",
-                "sebastian/version": "^3.0.2",
-                "theseer/tokenizer": "^1.2.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.6"
-            },
-            "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": "9.2.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/9.2.32"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2024-08-22T04:23:01+00:00"
-        },
-        {
-            "name": "phpunit/php-file-iterator",
-            "version": "3.0.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
-                "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
-                "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "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": "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",
-                "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2021-12-02T12:48:52+00:00"
-        },
-        {
-            "name": "phpunit/php-invoker",
-            "version": "3.1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-invoker.git",
-                "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
-                "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "ext-pcntl": "*",
-                "phpunit/phpunit": "^9.3"
-            },
-            "suggest": {
-                "ext-pcntl": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.1-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/3.1.1"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2020-09-28T05:58:55+00:00"
-        },
-        {
-            "name": "phpunit/php-text-template",
-            "version": "2.0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-text-template.git",
-                "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
-                "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "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": "Simple template engine.",
-            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
-            "keywords": [
-                "template"
-            ],
-            "support": {
-                "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
-                "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2020-10-26T05:33:50+00:00"
-        },
-        {
-            "name": "phpunit/php-timer",
-            "version": "5.0.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-timer.git",
-                "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
-                "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "5.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/5.0.3"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2020-10-26T13:16:10+00:00"
-        },
-        {
-            "name": "phpunit/phpunit",
-            "version": "9.6.22",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f80235cb4d3caa59ae09be3adf1ded27521d1a9c",
-                "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/instantiator": "^1.5.0 || ^2",
-                "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": ">=7.3",
-                "phpunit/php-code-coverage": "^9.2.32",
-                "phpunit/php-file-iterator": "^3.0.6",
-                "phpunit/php-invoker": "^3.1.1",
-                "phpunit/php-text-template": "^2.0.4",
-                "phpunit/php-timer": "^5.0.3",
-                "sebastian/cli-parser": "^1.0.2",
-                "sebastian/code-unit": "^1.0.8",
-                "sebastian/comparator": "^4.0.8",
-                "sebastian/diff": "^4.0.6",
-                "sebastian/environment": "^5.1.5",
-                "sebastian/exporter": "^4.0.6",
-                "sebastian/global-state": "^5.0.7",
-                "sebastian/object-enumerator": "^4.0.4",
-                "sebastian/resource-operations": "^3.0.4",
-                "sebastian/type": "^3.2.1",
-                "sebastian/version": "^3.0.2"
-            },
-            "suggest": {
-                "ext-soap": "To be able to generate mocks based on WSDL files",
-                "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
-            },
-            "bin": [
-                "phpunit"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "9.6-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/9.6.22"
-            },
-            "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": "2024-12-05T13:48:26+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": ""
-            },
-            "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": ""
-            },
-            "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.13.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/reactphp/dns.git",
-                "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5",
-                "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0",
-                "react/cache": "^1.0 || ^0.6 || ^0.5",
-                "react/event-loop": "^1.2",
-                "react/promise": "^3.2 || ^2.7 || ^1.2.1"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
-                "react/async": "^4.3 || ^3 || ^2",
-                "react/promise-timer": "^1.11"
-            },
-            "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.13.0"
-            },
-            "funding": [
-                {
-                    "url": "https://opencollective.com/reactphp",
-                    "type": "open_collective"
-                }
-            ],
-            "time": "2024-06-13T14:18:03+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": ""
-            },
-            "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/socket",
-            "version": "v1.16.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/reactphp/socket.git",
-                "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1",
-                "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1",
-                "shasum": ""
-            },
-            "require": {
-                "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
-                "php": ">=5.3.0",
-                "react/dns": "^1.13",
-                "react/event-loop": "^1.2",
-                "react/promise": "^3.2 || ^2.6 || ^1.2.1",
-                "react/stream": "^1.4"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
-                "react/async": "^4.3 || ^3.3 || ^2",
-                "react/promise-stream": "^1.4",
-                "react/promise-timer": "^1.11"
-            },
-            "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.16.0"
-            },
-            "funding": [
-                {
-                    "url": "https://opencollective.com/reactphp",
-                    "type": "open_collective"
-                }
-            ],
-            "time": "2024-07-26T10:38:09+00:00"
-        },
-        {
-            "name": "react/stream",
-            "version": "v1.4.0",
-            "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": ""
-            },
-            "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": "1.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/cli-parser.git",
-                "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
-                "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.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",
-                "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2024-03-02T06:27:43+00:00"
-        },
-        {
-            "name": "sebastian/code-unit",
-            "version": "1.0.8",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/code-unit.git",
-                "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
-                "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.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/1.0.8"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2020-10-26T13:08:54+00:00"
-        },
-        {
-            "name": "sebastian/code-unit-reverse-lookup",
-            "version": "2.0.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
-                "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
-                "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.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/2.0.3"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2020-09-28T05:30:19+00:00"
-        },
-        {
-            "name": "sebastian/comparator",
-            "version": "4.0.8",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/comparator.git",
-                "reference": "fa0f136dd2334583309d32b62544682ee972b51a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a",
-                "reference": "fa0f136dd2334583309d32b62544682ee972b51a",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3",
-                "sebastian/diff": "^4.0",
-                "sebastian/exporter": "^4.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.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",
-                "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2022-09-14T12:41:17+00:00"
-        },
-        {
-            "name": "sebastian/complexity",
-            "version": "2.0.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/complexity.git",
-                "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a",
-                "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a",
-                "shasum": ""
-            },
-            "require": {
-                "nikic/php-parser": "^4.18 || ^5.0",
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "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 calculating the complexity of PHP code units",
-            "homepage": "https://github.com/sebastianbergmann/complexity",
-            "support": {
-                "issues": "https://github.com/sebastianbergmann/complexity/issues",
-                "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2023-12-22T06:19:30+00:00"
-        },
-        {
-            "name": "sebastian/diff",
-            "version": "4.0.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/diff.git",
-                "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc",
-                "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.3",
-                "symfony/process": "^4.2 || ^5"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-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",
-                "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2024-03-02T06:30:58+00:00"
-        },
-        {
-            "name": "sebastian/environment",
-            "version": "5.1.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/environment.git",
-                "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
-                "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.3"
-            },
-            "suggest": {
-                "ext-posix": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "5.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": "http://www.github.com/sebastianbergmann/environment",
-            "keywords": [
-                "Xdebug",
-                "environment",
-                "hhvm"
-            ],
-            "support": {
-                "issues": "https://github.com/sebastianbergmann/environment/issues",
-                "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2023-02-03T06:03:51+00:00"
-        },
-        {
-            "name": "sebastian/exporter",
-            "version": "4.0.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72",
-                "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3",
-                "sebastian/recursion-context": "^4.0"
-            },
-            "require-dev": {
-                "ext-mbstring": "*",
-                "phpunit/phpunit": "^9.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.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": "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",
-                "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2024-03-02T06:33:00+00:00"
-        },
-        {
-            "name": "sebastian/global-state",
-            "version": "5.0.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/global-state.git",
-                "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
-                "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3",
-                "sebastian/object-reflector": "^2.0",
-                "sebastian/recursion-context": "^4.0"
-            },
-            "require-dev": {
-                "ext-dom": "*",
-                "phpunit/phpunit": "^9.3"
-            },
-            "suggest": {
-                "ext-uopz": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "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": "Snapshotting of global state",
-            "homepage": "http://www.github.com/sebastianbergmann/global-state",
-            "keywords": [
-                "global state"
-            ],
-            "support": {
-                "issues": "https://github.com/sebastianbergmann/global-state/issues",
-                "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2024-03-02T06:35:11+00:00"
-        },
-        {
-            "name": "sebastian/lines-of-code",
-            "version": "1.0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/lines-of-code.git",
-                "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5",
-                "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5",
-                "shasum": ""
-            },
-            "require": {
-                "nikic/php-parser": "^4.18 || ^5.0",
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.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",
-                "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2023-12-22T06:20:34+00:00"
-        },
-        {
-            "name": "sebastian/object-enumerator",
-            "version": "4.0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/object-enumerator.git",
-                "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
-                "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3",
-                "sebastian/object-reflector": "^2.0",
-                "sebastian/recursion-context": "^4.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.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/4.0.4"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2020-10-26T13:12:34+00:00"
-        },
-        {
-            "name": "sebastian/object-reflector",
-            "version": "2.0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/object-reflector.git",
-                "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
-                "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.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/2.0.4"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2020-10-26T13:14:26+00:00"
-        },
-        {
-            "name": "sebastian/recursion-context",
-            "version": "4.0.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/recursion-context.git",
-                "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
-                "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.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/4.0.5"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2023-02-03T06:07:39+00:00"
-        },
-        {
-            "name": "sebastian/resource-operations",
-            "version": "3.0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/resource-operations.git",
-                "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
-                "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.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": "Provides a list of PHP built-in functions that operate on resources",
-            "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
-            "support": {
-                "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2024-03-14T16:00:52+00:00"
-        },
-        {
-            "name": "sebastian/type",
-            "version": "3.2.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/type.git",
-                "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
-                "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.5"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "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": "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/3.2.1"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2023-02-03T06:13:03+00:00"
-        },
-        {
-            "name": "sebastian/version",
-            "version": "3.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/version.git",
-                "reference": "c6c1022351a901512170118436c764e473f6de8c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
-                "reference": "c6c1022351a901512170118436c764e473f6de8c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "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": "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/3.0.2"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2020-09-28T06:39:44+00:00"
-        },
-        {
-            "name": "swoole/ide-helper",
-            "version": "4.8.13",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/swoole/ide-helper.git",
-                "reference": "d100c446b2e3d56430cbcab5dc3fa20a9f35c4ef"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/swoole/ide-helper/zipball/d100c446b2e3d56430cbcab5dc3fa20a9f35c4ef",
-                "reference": "d100c446b2e3d56430cbcab5dc3fa20a9f35c4ef",
-                "shasum": ""
-            },
-            "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/4.8.13"
-            },
-            "time": "2023-03-20T06:46:24+00:00"
-        },
-        {
-            "name": "symfony/event-dispatcher",
-            "version": "v5.4.45",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/72982eb416f61003e9bb6e91f8b3213600dcf9e9",
-                "reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/event-dispatcher-contracts": "^2|^3",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<4.4"
-            },
-            "provide": {
-                "psr/event-dispatcher-implementation": "1.0",
-                "symfony/event-dispatcher-implementation": "2.0"
-            },
-            "require-dev": {
-                "psr/log": "^1|^2|^3",
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/error-handler": "^4.4|^5.0|^6.0",
-                "symfony/expression-language": "^4.4|^5.0|^6.0",
-                "symfony/http-foundation": "^4.4|^5.0|^6.0",
-                "symfony/service-contracts": "^1.1|^2|^3",
-                "symfony/stopwatch": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "symfony/dependency-injection": "",
-                "symfony/http-kernel": ""
-            },
-            "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/v5.4.45"
-            },
-            "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:11:13+00:00"
-        },
-        {
-            "name": "symfony/event-dispatcher-contracts",
-            "version": "v3.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
-                "reference": "7bc61cc2db649b4637d331240c5346dcc7708051"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051",
-                "reference": "7bc61cc2db649b4637d331240c5346dcc7708051",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.0.2",
-                "psr/event-dispatcher": "^1"
-            },
-            "suggest": {
-                "symfony/event-dispatcher-implementation": ""
-            },
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "url": "https://github.com/symfony/contracts",
-                    "name": "symfony/contracts"
-                },
-                "branch-alias": {
-                    "dev-main": "3.0-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.0.2"
-            },
-            "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": "2022-01-02T09:55:41+00:00"
-        },
-        {
-            "name": "symfony/filesystem",
-            "version": "v5.4.45",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/filesystem.git",
-                "reference": "57c8294ed37d4a055b77057827c67f9558c95c54"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/57c8294ed37d4a055b77057827c67f9558c95c54",
-                "reference": "57c8294ed37d4a055b77057827c67f9558c95c54",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-mbstring": "~1.8",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "require-dev": {
-                "symfony/process": "^5.4|^6.4"
-            },
-            "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/v5.4.45"
-            },
-            "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-22T13:05:35+00:00"
-        },
-        {
-            "name": "symfony/options-resolver",
-            "version": "v5.4.45",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/options-resolver.git",
-                "reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/options-resolver/zipball/74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6",
-                "reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-php73": "~1.0",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "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/v5.4.45"
-            },
-            "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:11:13+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": ""
-            },
-            "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/process",
-            "version": "v5.4.47",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/process.git",
-                "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/5d1662fb32ebc94f17ddb8d635454a776066733d",
-                "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "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/v5.4.47"
-            },
-            "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-06T11:36:42+00:00"
-        },
-        {
-            "name": "symfony/stopwatch",
-            "version": "v5.4.45",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "fb2c199cf302eb207f8c23e7ee174c1c31a5c004"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fb2c199cf302eb207f8c23e7ee174c1c31a5c004",
-                "reference": "fb2c199cf302eb207f8c23e7ee174c1c31a5c004",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/service-contracts": "^1|^2|^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/v5.4.45"
-            },
-            "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:11:13+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": ""
-            },
-            "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.0"
-    },
-    "platform-dev": [],
-    "plugin-api-version": "2.3.0"
-}

BIN
deploy/.DS_Store


BIN
deploy/supervisord/.DS_Store


+ 0 - 1
runtime/container/aspects.cache

@@ -1 +0,0 @@
-a:2:{i:0;s:36:"Hyperf\Config\Annotation\ValueAspect";i:1;s:33:"Hyperf\Di\Annotation\InjectAspect";}

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


+ 0 - 41
runtime/container/proxy/App_Controller_AbstractController.proxy.php

@@ -1,41 +0,0 @@
-<?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
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * @Inject
-     * @var ContainerInterface
-     */
-    protected $container;
-    /**
-     * @Inject
-     * @var RequestInterface
-     */
-    protected $request;
-    /**
-     * @Inject
-     * @var ResponseInterface
-     */
-    protected $response;
-}

+ 0 - 87
runtime/container/proxy/App_Controller_CoreController.proxy.php

@@ -1,87 +0,0 @@
-<?php
-
-/**
- * 核心控制器.
- *
- * @author nj <nj@gmail.com>
- * @date   2020-01-22 20:35:31
- */
-declare (strict_types=1);
-namespace App\Controller;
-
-use App\Constants\CommonConstant;
-use Hyperf\HttpServer\Contract\RequestInterface;
-use Hyperf\HttpServer\Contract\ResponseInterface;
-use Hyperf\HttpServer\Router\Router;
-use Psr\Container\ContainerInterface;
-use Hyperf\Di\Annotation\Inject;
-class CoreController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 容器接口.
-     *
-     * @Inject
-     * @var    ContainerInterface
-     */
-    protected $container;
-    /**
-     * 请求接口.
-     *
-     * @Inject
-     * @var    RequestInterface
-     */
-    protected $request;
-    /**
-     * 相应接口.
-     *
-     * @Inject
-     * @var    ResponseInterface
-     */
-    protected $response;
-    /**
-     * 获取
-     * @return array|mixed
-     */
-    protected function getJsonData()
-    {
-        return getDecodeData();
-    }
-    /**
-     * 获取日志需要的当前模块名和动作名.
-     * @return array
-     */
-    protected function getModuleAndAction()
-    {
-        $routeAction = $this->getCurrentRouteHandler();
-        $controller_suffix = 'Controller';
-        preg_match_all('/([a-z0-9A-Z]+\\\\)?(\\w+)@(\\w+)/', $routeAction, $matchs);
-        $controller_full = !empty($matchs[2][0]) ? $matchs[2][0] : '';
-        //类名.
-        $controller = str_replace($controller_suffix, '', $controller_full);
-        // 控制器名.
-        $action = !empty($matchs[3][0]) ? $matchs[3][0] : '';
-        //方法名.
-        return [$controller, $action];
-    }
-    /**
-     * 获取当前路由话柄.
-     * @return string
-     */
-    protected function getCurrentRouteHandler()
-    {
-        $currentUri = $this->request->getRequestUri();
-        $currentMethod = $this->request->getMethod();
-        $routeData = Router::getData();
-        if (isset($routeData[0][$currentMethod][$currentUri])) {
-            return $routeData[0][$currentMethod][$currentUri]->callback;
-        } else {
-            return '';
-        }
-    }
-}

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

@@ -1,31 +0,0 @@
-<?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
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    public function index()
-    {
-        $user = request()->input('user_ttt', 'good');
-        $method = request()->getMethod();
-        return ['method' => $method, 'message' => "Hello C2J2."];
-    }
-}

+ 0 - 94
runtime/container/proxy/App_Task_ConfigUsdtRate.proxy.php

@@ -1,94 +0,0 @@
-<?php
-
-namespace App\Task;
-
-use App\Repositories\ConfigRepoistory;
-use Hyperf\Crontab\Annotation\Crontab;
-use Hyperf\Di\Annotation\Inject;
-use Hyperf\Guzzle\ClientFactory;
-/**
- * @Crontab(name="UsdtRate", rule="00 /1 * * *", callback="execute", memo="usdt汇率")
- */
-class ConfigUsdtRate
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * @Inject()
-     * @var \Hyperf\Contract\StdoutLoggerInterface
-     */
-    private $logger;
-    private $reatUrl = ['http://api.coincap.io/v2/rates/chinese-yuan-renminbi', 'https://v6.exchangerate-api.com/v6/1a45491bb39175ddc4203829/latest/CNY', 'https://api.exchangerate-api.com/v4/latest/CNY'];
-    public function execute()
-    {
-        $confRepo = make(ConfigRepoistory::class);
-        $config = $confRepo->pickByKeys(['usdt_conf', 'usdt_pick_switch'], 'sys');
-        if ($config['usdt_pick_switch']['svalue'] != 1) {
-            return '';
-        }
-        $oldUsdtRate = $config['usdt_conf']['svalue'];
-        foreach ($this->reatUrl as $key => $url) {
-            try {
-                $res = $this->curl($url);
-                if (empty($res)) {
-                    continue;
-                }
-                $aRes = json_decode($res, true);
-                if ($key == 0) {
-                    if (empty($aRes['data']) || $aRes['data']['symbol'] != 'CNY') {
-                        continue;
-                    }
-                    $rateUsd = round($aRes['data']['rateUsd'], 2);
-                    break;
-                }
-                if ($key == 1) {
-                    if (empty($aRes['result']) || $aRes['result'] != 'success') {
-                        continue;
-                    }
-                    $rateUsd = round($aRes['conversion_rates']['USD'], 2);
-                    break;
-                }
-                if ($key == 2) {
-                    if (empty($aRes['rates'])) {
-                        continue;
-                    }
-                    $rateUsd = round($aRes['rates']['USD'], 2);
-                    break;
-                }
-            } catch (\Exception $exception) {
-                logger($exception->getMessage());
-            }
-        }
-        $usdtRate = round(100 / $rateUsd, 2) / 100;
-        if ($oldUsdtRate != $usdtRate) {
-            $confRepo->saveByKeys(['usdt_conf' => $usdtRate + 0.3], 'sys');
-            $confRepo->updateConfigCache('sys');
-        }
-    }
-    private function curl($url)
-    {
-        $options = array(
-            'timeout' => 20,
-            // 超时,单位秒.
-            'verify' => false,
-            // 是否校验SSL证书.
-            'http_errors' => false,
-            // 如果跟随http异常头部是否中断.
-            'debug' => false,
-            // 是否启用调试模式.
-            'allow_redirects' => true,
-        );
-        $client = make(ClientFactory::class)->create($options);
-        $params = ['headers' => ['Content-Type' => 'application/json']];
-        $result = $client->get($url, $params);
-        $code = $result->getStatusCode();
-        if ($code == 200) {
-            return $result->getBody()->getContents();
-        }
-        return [];
-    }
-}

+ 0 - 44
runtime/container/proxy/App_Task_ExpiredOrder.proxy.php

@@ -1,44 +0,0 @@
-<?php
-
-namespace App\Task;
-
-use App\Model\CoinsOrderModel;
-use App\Model\VipOrderModel;
-use Hyperf\Crontab\Annotation\Crontab;
-use Hyperf\Di\Annotation\Inject;
-/**
- * @Crontab(name="expiredOrder", rule="/1 * * * *", callback="execute", memo="过期订单处理")
- */
-class ExpiredOrder
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * @Inject()
-     * @var \Hyperf\Contract\StdoutLoggerInterface
-     */
-    private $logger;
-    public function execute()
-    {
-        $expiredTime = date('Y-m-d H:i:s', time() - 400);
-        // vip订单
-        $vipOrder = VipOrderModel::query()->where('created_at', '<', $expiredTime)->where('status', '3')->get(['id']);
-        // 金币订单
-        $coinsOrder = CoinsOrderModel::query()->where('created_at', '<', $expiredTime)->where('status', '3')->get(['id']);
-        $updataData = ['status' => 2];
-        if ($vipOrder->isNotEmpty()) {
-            foreach ($vipOrder as $vipVal) {
-                VipOrderModel::query()->where('id', $vipVal->id)->update($updataData);
-            }
-        }
-        if ($coinsOrder->isNotEmpty()) {
-            foreach ($coinsOrder as $coinsVal) {
-                CoinsOrderModel::query()->where('id', $coinsVal->id)->update($updataData);
-            }
-        }
-    }
-}

+ 0 - 43
runtime/container/proxy/App_Task_RebateListInit.proxy.php

@@ -1,43 +0,0 @@
-<?php
-
-namespace App\Task;
-
-use App\Model\UserRebateLevelModel;
-use Hyperf\Crontab\Annotation\Crontab;
-use Hyperf\Di\Annotation\Inject;
-/**
- * 每天凌晨五分计算
- *
- * @Crontab(name="rebateListInit", rule="5 0 * * *", callback="execute", memo="返佣榜单初始化")
- */
-class RebateListInit
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * @Inject()
-     * @var \Hyperf\Contract\StdoutLoggerInterface
-     */
-    private $logger;
-    public function execute()
-    {
-        $monthDay = date('d');
-        $weekDaty = $this->getWeek();
-        if ($monthDay == 1 || $monthDay == 01) {
-            UserRebateLevelModel::query()->update(['moon_amount' => 0]);
-        }
-        if ($weekDaty == 1) {
-            UserRebateLevelModel::query()->update(['week_amount' => 0]);
-        }
-    }
-    //php获取今天是星期几
-    function getWeek($unixTime = '')
-    {
-        $unixTime = is_numeric($unixTime) ? $unixTime : time();
-        return date('w', $unixTime);
-    }
-}

+ 0 - 372
runtime/container/proxy/Modules_Api_Controllers_AuthController.proxy.php

@@ -1,372 +0,0 @@
-<?php
-
-/**
- * 认证控制器.
- *
- * @author nj <nj@gmail.com>
- * @date   2020-01-22 09:37:54
- */
-declare (strict_types=1);
-namespace Modules\Api\Controllers;
-
-use App\Constants\AdConstrant;
-use App\Constants\CreatorConstant;
-use App\Events\Task\DailyLoginEvent;
-use App\Events\Task\FillCodeEvent;
-use App\Events\Task\FirstRegisterEvent;
-use App\Events\Task\InviteFriendsEvent;
-use App\Events\Task\TimeTaskEvent;
-use App\Events\User\UserLoginEvent;
-use App\Model\UserModel;
-use App\Model\VersionModel;
-use App\Model\VipOrderModel;
-use App\Repositories\BannedIpRepository;
-use App\Repositories\ConfigRepoistory;
-use App\Repositories\MessageRepository;
-use App\Repositories\Service\CommonService;
-use App\Repositories\Service\QueueService;
-use App\Repositories\ShopsRepository;
-use App\Repositories\UserRepository;
-use App\Repositories\Utils\JwtRepository;
-use App\Repositories\Utils\M3u8CacheRepository;
-use App\Repositories\Utils\RandomUserInfoRepository;
-use App\Repositories\VersionRepository;
-use Carbon\Carbon;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Lcobucci\JWT\UnencryptedToken;
-use Modules\Api\Services\AuthService;
-use Modules\Api\Services\VideoService;
-use Psr\SimpleCache\CacheInterface;
-class AuthController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * Jwt受众.
-     *
-     * @var string
-     */
-    private $jwtAud = 'app-users';
-    /**
-     * 设备登录并返回Token.
-     * @param  ValidatorFactoryInterface  $validatorFactory
-     * @param  AuthService  $authService
-     * @return mixed
-     * @throws \Psr\SimpleCache\InvalidArgumentException
-     */
-    public function loginByDevice(ValidatorFactoryInterface $validatorFactory, AuthService $authService)
-    {
-        // Json Body Raw获取
-        $inputData = $this->getJsonData();
-        // Demo 这是在控制器内校验器的写法.
-        $rules = [
-            'code' => 'nullable',
-            // 父级邀请人的UID
-            'token' => 'nullable',
-            'channel' => 'nullable',
-            // 渠道UID
-            'version' => 'required',
-            'device_no' => 'required',
-            'device_type' => 'required|in:A,I,H',
-            'finger_hash' => 'nullable|string|max:32',
-            'self_sign' => 'nullable|string',
-            // 苹果自签,yes=是的
-            'bundle_id' => 'nullable|string',
-        ];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $clientIp = make(CommonService::class)->getIp();
-        if (!filter_var($clientIp, FILTER_VALIDATE_IP)) {
-            return json_fail('认证失败8');
-        }
-        $inputData['device_no'] = strval($inputData['device_no']);
-        $hVersion = strval(data_get($inputData, 'version', ''));
-        $hDeviceNo = data_get($inputData, 'device_no', '');
-        $hDeviceType = data_get($inputData, 'device_type', '');
-        $hFingerHash = strval(data_get($inputData, 'finger_hash', ''));
-        $hSelfSign = strval(data_get($inputData, 'self_sign', ''));
-        // 苹果自签,yes字符串
-        $hBundleId = strval(data_get($inputData, 'bundle_id', ''));
-        // 包名
-        $cache = make(CacheInterface::class);
-        $user = null;
-        $auth = [];
-        //有token的情况
-        if (!empty($inputData['token'])) {
-            $jwtRepository = make(JwtRepository::class);
-            $validateResult = $jwtRepository->validateToken($inputData['token'], $this->jwtAud);
-            if (!$validateResult['is_valid']) {
-                if ($validateResult['is_expired']) {
-                    return json_fail('认证过期', 401);
-                }
-                return json_fail('认证失败1', 403);
-            } else {
-                // 验证单点.
-                /**
-                 * @var UnencryptedToken $tokenObj
-                 */
-                $tokenObj = $validateResult['token_obj'];
-                $deviceNo = $tokenObj->claims()->get('device_no');
-                $deviceType = $tokenObj->claims()->get('device_type');
-                $fingerHash = $tokenObj->claims()->get('finger_hash');
-                $cacheKey = $authService->getUserDeviceCacheKey($deviceNo, $deviceType);
-                $cacheToken = $cache->has($cacheKey) ? $cache->get($cacheKey) : '';
-                if (empty($cacheToken) || $cacheToken !== $inputData['token']) {
-                    return json_fail('认证失败2', 403);
-                }
-                if ($hDeviceNo !== $deviceNo || $hDeviceType != $deviceType) {
-                    return json_fail('认证失败3', 403);
-                }
-                $auth['token'] = $cacheToken;
-            }
-        }
-        //没有token的情况
-        if (empty($inputData['token'])) {
-            // 可能串号,重复的设备号,做一次排序查询处理.
-            $user = UserModel::query()->where(['device_no' => $hDeviceNo, 'device_type' => $hDeviceType])->orderBy('id', 'ASC')->first();
-            // 临时关闭ios指纹
-            /*if (!$user) {
-                  if ($hDeviceType == 'I' && !empty($hFingerHash)) {
-                      // 仅iOS再查指纹.
-                      $user = UserModel::query()->where(['finger_hash' => $hFingerHash, 'device_type' => $hDeviceType])->first();
-                  }
-              }*/
-        }
-        if ($hDeviceType == 'A') {
-            if (version_compare($hVersion, '1.1.0', '<') || version_compare($hVersion, '1.99.1', '>')) {
-                return json_fail('认证失败7', 403);
-            }
-        }
-        //启动页广告
-        $startup = null;
-        // 视频内引导广告(多个)
-        $adsGuide = null;
-        //配置
-        $config = [];
-        $configModel = make(ConfigRepoistory::class);
-        $config['rule'] = $configModel->gets([], 'rule');
-        $config['sys'] = $configModel->gets(['app_notice', 'notice', 'share_text', 'share_url', 'upload_url', 'skip', 'app_url', 'server_link', 'share_bg', 'video_preview_seconds', 'withdraw_usdt', 'withdraw_money', 'hotel_coin', 'ppvod_base_url', 'ppvod_upload_key', 'ppvod_sign_key', 'chat_coin'], 'sys');
-        //公告
-        if (empty($config['sys']['notice'])) {
-            $config['sys']['app_notice'] = '';
-            unset($config['sys']['notice']);
-        }
-        if (!empty($user)) {
-            // 检查是否被删,是否被锁定.
-            if (intval($user->status) != 1) {
-                return json_fail('该用户被禁用');
-            }
-            make(QueueService::class)->refreshLoginTimePush(['user_id' => $user->code, 'version' => $user->version], 1);
-        } else {
-            //注册
-            $isBannedIp = make(BannedIpRepository::class)->isBanned($clientIp);
-            if ($isBannedIp) {
-                return json_fail('认证失败9', 403);
-            }
-            // 注册时,校验提交的版本和最新强制版本对比.
-            $cacheVersionKey = 'force_version:' . $hDeviceType;
-            $lastForceVersionInfo = make(VersionRepository::class)->getLastForce($hDeviceType);
-            if (!empty($lastForceVersionInfo)) {
-                if (version_compare($hVersion, $lastForceVersionInfo['version_code'], '<')) {
-                    return json_fail('认证失败8', 403);
-                }
-            }
-            if (!empty($inputData['code'])) {
-                $info = make(UserRepository::class)->getUserInfoFromCache($inputData['code']);
-                if ($info) {
-                    $parentUid = $info['code'];
-                }
-            }
-            // 随机头像.
-            $sysAvatars = make(UserRepository::class)->getSysAvatars();
-            $sysAvatars[] = 'f2|/' . env('STATIC_DIR_NAME', 'doukui') . '/avatars/default.ceb';
-            $randKey = array_rand($sysAvatars);
-            $avatar = $sysAvatars[$randKey];
-            $createData = ['ip' => $clientIp, 'avatar' => $avatar, 'device_no' => $hDeviceNo, 'parent_uid' => $parentUid ?? '', 'channel_id' => $inputData['channel'] ?? '', 'device_type' => $hDeviceType, 'version' => $hVersion, 'finger_hash' => $hFingerHash ?? '', 'last_login_at' => Carbon::now()->toDateTimeString(), 'bundle_id' => $hBundleId];
-            $user = UserModel::query()->create($createData);
-            //生成邀请码
-            $code = hashEncodeId($user->id);
-            $user->code = $code;
-            $user->nick = RandomUserInfoRepository::getNickname();
-            $user->save();
-            //会员裂变关系逻辑 丢队列异步执行
-            if (!empty($parentUid)) {
-                make(QueueService::class)->createUserRelationJob(['invite_id' => $parentUid, 'invited_id' => $user->code], 1);
-                // 绑定邀请码任务
-                dispatch_event(new FillCodeEvent(['user_id' => $user->code]));
-                // 邀请好友任务事件
-                dispatch_event(new InviteFriendsEvent(['user_id' => $parentUid]));
-                // 限时任务队列
-                make(QueueService::class)->timeTaskSendRewardJob(['user_id' => $parentUid], 5);
-            }
-            //注册奖励事件
-            $registerEventParams = ['ip' => $clientIp, 'user_id' => $code, 'device_type' => $hDeviceType, 'self_sign' => $hSelfSign];
-            dispatch_event(new FirstRegisterEvent($registerEventParams));
-            $jobParams = ['uid' => $user->id, 'dt' => $hDeviceType, 'is_vip' => 0, 'date' => Carbon::now()->toDateString()];
-            //异步丢注册统计日志
-            make(QueueService::class)->addRegisterJob($jobParams);
-            //代理系统异步注册
-            make(QueueService::class)->agentUserRegistJob($user->toArray());
-        }
-        if (empty($auth)) {
-            $auth = $authService->createSingleJwt($user->code, $hDeviceNo, $hDeviceType, $hVersion, $hFingerHash);
-        }
-        // 拼接版本里的zip_url
-        $tmpHeaderVersion = $hVersion;
-        $versionCacheKey = 'version:' . $hDeviceType . ':v' . $tmpHeaderVersion;
-        $versionItem = make(CacheInterface::class)->remember($versionCacheKey, 60 * 60, function () use($inputData, $hVersion, $hDeviceType, $tmpHeaderVersion) {
-            if ($hDeviceType == 'I') {
-                // 针对马甲包,特例处理,状态可以是隐藏.
-                $conditions = ['device_type' => $hDeviceType, 'version_type' => 'free', 'version_code' => $tmpHeaderVersion];
-            } else {
-                $conditions = ['status' => 1, 'device_type' => $hDeviceType, 'version_type' => 'free', 'version_code' => $hVersion];
-            }
-            $item = VersionModel::query()->where($conditions)->orderByDesc('version_code')->first();
-            if (!empty($item)) {
-                $item = $item->toArray();
-                $item['app_url'] = make(ConfigRepoistory::class)->get('share_url', 'sys');
-                return $item;
-            } else {
-                return null;
-            }
-        });
-        $config['sys']['version_zip_url'] = !empty($versionItem['zip_url']) ? $versionItem['zip_url'] : '';
-        // ppvod上传最大容量,单位MB
-        $config['sys']['file_max_size_mb'] = CreatorConstant::VIDEO_MAX_SIZE_MB;
-        // 文件最大多少MB
-        //邀请链接组装
-        $config['sys']['share_url'] .= '?invite_code=' . $user->code . '&channel_code=';
-        $config['sys']['share_text'] = str_replace('{{share_url}}', $config['sys']['share_url'], $config['sys']['share_text']);
-        $config['sys']['share_bg'] = isset($config['sys']['share_bg']) ? M3u8CacheRepository::getImageUrl($config['sys']['share_bg']) : '';
-        $videoService = make(VideoService::class);
-        $startupItems = $videoService->getAdList('startup');
-        $adsGuideItems = $videoService->getAdList(AdConstrant::VIDEO_GUIDE);
-        // 视频内引导广告,多个
-        if ($startupItems) {
-            $randKey = array_rand($startupItems);
-            $startupOne = $startupItems[$randKey];
-            $startup = ['title' => $startupOne['title'], 'cover' => M3u8CacheRepository::getImageUrl($startupOne['cover']), 'link' => $startupOne['link'], 'scheme' => $startupOne['scheme'], 'type' => $startupOne['type'], 'play' => !empty($startupOne['play']) ? M3u8CacheRepository::getVideoInnerUrl($startupOne['play'], $user->code, $startupOne['id'], 'ad') : '', 'resolution' => $startupOne['resolution'] ?? ''];
-            if (!empty($startup['link'])) {
-                $startup['link'] = M3u8CacheRepository::getLinkUrl($startup['link'], ['user_code' => $user->code]);
-            }
-        }
-        if (!empty($adsGuideItems)) {
-            $adsGuide = [];
-            foreach ($adsGuideItems as $v) {
-                $tmpLink = $v['link'];
-                if (!empty($tmpLink)) {
-                    $tmpLink = M3u8CacheRepository::getLinkUrl($tmpLink, ['user_code' => $user->code]);
-                }
-                $adsGuide[] = ['title' => $v['title'], 'cover' => M3u8CacheRepository::getImageUrl($v['cover']), 'link' => $tmpLink, 'scheme' => $v['scheme']];
-            }
-        }
-        $data['auth'] = $auth;
-        $data['startup'] = $startup;
-        $data['config'] = $config;
-        $data['skip'] = $config['sys']['skip'];
-        // 启动屏跳转秒数.
-        $data['ads_guide'] = $adsGuide;
-        $kefuUrl = isset($data['config']['sys']['server_link']) ? $data['config']['sys']['server_link'] : '';
-        if (strripos($kefuUrl, '?')) {
-            $kefuUrl .= '&user_code=' . $user->code;
-        } else {
-            $kefuUrl .= '?user_code=' . $user->code;
-        }
-        $data['config']['sys']['server_link'] = $kefuUrl;
-        $data['config']['sys']['video_preview_seconds'] = intval($data['config']['sys']['video_preview_seconds']);
-        $data['config']['sys']['withdraw_money'] = (int) $data['config']['sys']['withdraw_money'];
-        $data['config']['sys']['withdraw_usdt'] = (int) $data['config']['sys']['withdraw_usdt'];
-        $data['config']['sys']['hotel_coin'] = (int) $data['config']['sys']['hotel_coin'];
-        $data['config']['sys']['chat_coin'] = $data['config']['sys']['chat_coin'];
-        //使用redis统计日活
-        //        $jobParams = [
-        //            'user_id'     => $user->code,
-        //            'version'     => $hVersion,
-        //            'device_type' => $hDeviceType,
-        //        ];
-        // 触发事件(可以作为演示hyperf event+listener实现应用).
-        $eventParams = ['user_id' => $user->code, 'version' => $hVersion, 'device_type' => $hDeviceType, 'device_no' => $hDeviceNo, 'finger_hash' => $hFingerHash, 'ip' => $clientIp];
-        dispatch_event(new UserLoginEvent($eventParams));
-        //登陆奖励事件
-        dispatch_event(new DailyLoginEvent(['user_id' => $user->code]));
-        // 代理系统异步登陆
-        if (empty($user->version)) {
-            $user->version = $hVersion;
-        }
-        make(QueueService::class)->agentUserLoginJob($user->toArray());
-        return json_success($data);
-    }
-    /**
-     * 刷新Token并返回token
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @param JwtRepository $jwtRepository
-     * @param AuthService $authService
-     * @return mixed
-     * @throws \Psr\SimpleCache\InvalidArgumentException
-     */
-    public function refreshToken(ValidatorFactoryInterface $validatorFactory, JwtRepository $jwtRepository, AuthService $authService)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['device_no' => 'required', 'device_type' => 'required|in:I,A,H', 'old_token' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $inputData['device_no'] = strval($inputData['device_no']);
-        $hDeviceNo = data_get($inputData, 'device_no', '');
-        $hDeviceType = data_get($inputData, 'device_type', '');
-        $hOldToken = data_get($inputData, 'old_token', '');
-        $hFingerHash = strval(data_get($inputData, 'finger_hash', ''));
-        $hSelfSign = strval(data_get($inputData, 'self_sign', ''));
-        // 苹果自签,yes字符串
-        // 是否强制刷新.
-        $validateResult = $jwtRepository->validateToken($hOldToken, $this->jwtAud);
-        if ($validateResult['is_illegal']) {
-            return json_fail('旧token非法.');
-        }
-        $clientIp = make(CommonService::class)->getIp();
-        if (!filter_var($clientIp, FILTER_VALIDATE_IP)) {
-            return json_fail('认证失败8');
-        }
-        /**
-         * @var UnencryptedToken $tokenObj
-         */
-        $tokenObj = $validateResult['token_obj'];
-        $userId = $tokenObj->claims()->get('user_id');
-        $deviceNo = $tokenObj->claims()->get('device_no');
-        $deviceType = $tokenObj->claims()->get('device_type');
-        $version = $tokenObj->claims()->get('version');
-        $fingerHash = $tokenObj->claims()->get('finger_hash');
-        // 检查入参设备信息是否有效.
-        if ($deviceNo != $hDeviceNo) {
-            return json_fail('无效数据匹配.');
-        }
-        if ($deviceType != $hDeviceType) {
-            return json_fail('无效数据匹配.');
-        }
-        if (!$validateResult['is_valid'] && $validateResult['is_expired']) {
-            $tokenInfo = $authService->createSingleJwt($userId, $deviceNo, $deviceType, $version, $fingerHash);
-        } else {
-            return json_fail('旧Token无效或者未过期');
-        }
-        //更新登陆时间
-        make(QueueService::class)->refreshLoginTimePush(['user_id' => $userId, 'version' => $version], 1);
-        // 触发事件(可以作为演示hyperf event+listener实现应用).
-        $eventParams = ['user_id' => $userId, 'version' => $version, 'device_type' => $hDeviceType, 'device_no' => $hDeviceNo, 'finger_hash' => $hFingerHash, 'ip' => $clientIp];
-        dispatch_event(new UserLoginEvent($eventParams));
-        $data = ['token' => $tokenInfo['token'], 'expired_at' => $tokenInfo['expired_at']];
-        return json_success($data);
-    }
-}

+ 0 - 68
runtime/container/proxy/Modules_Api_Controllers_BaseController.proxy.php

@@ -1,68 +0,0 @@
-<?php
-
-declare (strict_types=1);
-namespace Modules\Api\Controllers;
-
-use App\Constants\CommonConstant;
-use App\Controller\CoreController;
-use App\Repositories\UserLogRepository;
-use App\Repositories\Utils\JwtRepository;
-use Hyperf\Di\Annotation\Inject;
-use Hyperf\HttpServer\Contract\RequestInterface;
-use Hyperf\HttpServer\Contract\ResponseInterface;
-use Modules\Api\Services\AuthService;
-use Psr\Container\ContainerInterface;
-class BaseController extends CoreController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 容器接口.
-     *
-     * @Inject
-     * @var    ContainerInterface
-     */
-    protected $container;
-    /**
-     * 请求接口.
-     *
-     * @Inject
-     * @var    RequestInterface
-     */
-    protected $request;
-    /**
-     * 相应接口.
-     *
-     * @Inject
-     * @var    ResponseInterface
-     */
-    protected $response;
-    /**
-     * 获取用户Id.
-     * @return string
-     */
-    public function getUserId()
-    {
-        return (new AuthService())->getUserId();
-    }
-    /**
-     * 记录操作日志.
-     * @param string $subject 主题.
-     * @param  string  $svalue 关联数据.
-     * @return bool
-     */
-    protected function log(string $subject, $svalue = '')
-    {
-        list($module, $action) = $this->getModuleAndAction();
-        $inputs = ['user_id' => $this->getUserId(), 'subject' => mb_strcut((string) $subject, 0, 700), 'module' => $module, 'action' => $action, 'svalue' => !empty($svalue) ? mb_strcut((string) $svalue, 0, 700) : ''];
-        make(UserLogRepository::class)->createOne($inputs);
-        return true;
-    }
-}

+ 0 - 63
runtime/container/proxy/Modules_Api_Controllers_BulletinController.proxy.php

@@ -1,63 +0,0 @@
-<?php
-
-/**
- * 公告管理
- */
-declare (strict_types=1);
-namespace Modules\Api\Controllers;
-
-use App\Constants\AdConstrant;
-use App\Model\BulletinModel;
-use App\Repositories\Utils\M3u8CacheRepository;
-use Carbon\Carbon;
-use Modules\Api\Services\AuthService;
-use Modules\Api\Services\VideoService;
-use Psr\SimpleCache\CacheInterface;
-class BulletinController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 首页数据
-     * @return mixed
-     */
-    public function lists()
-    {
-        $userToken = (new AuthService())->getTokenUserInfo();
-        $device = $userToken['device_type'] == 'A' ? 1 : 2;
-        $cacheInterface = make(CacheInterface::class);
-        $videoService = make(VideoService::class);
-        $deviceAll = [$device, 3];
-        // 公告
-        $bulletinModel = $cacheInterface->remember('bulletin:' . $device, 60 * 60, function () use($deviceAll) {
-            $nowData = Carbon::now()->toDateTimeString();
-            return BulletinModel::query()->whereNull('deleted_at')->whereIn('device', $deviceAll)->where([['status', '=', 1], ['start_time', '<', $nowData], ['end_time', '>', $nowData]])->orderByDesc('sort')->get(['title', 'sort', 'start_time', 'end_time', 'text'])->toArray();
-        });
-        $newData = [];
-        $nowTime = time();
-        $css = <<<HTML
- <link rel="stylesheet" type="text/css" href="http://h5.py163.xyz/app/rich_text/css/chuji_rich.css?v={$nowTime}">
-HTML;
-        foreach ($bulletinModel as $bulletin) {
-            $bulletin['ad_model'] = 2;
-            $bulletin['text'] = $css . $bulletin['text'];
-            $newData[] = $bulletin;
-        }
-        // 广告
-        $adImageHomeItems = $videoService->getAdList(AdConstrant::IMAGES_HOME);
-        if (!empty($adImageHomeItems)) {
-            foreach ($adImageHomeItems as $adImagesV) {
-                $link = M3u8CacheRepository::getLinkUrl($adImagesV['link'], ['user_code' => $userToken['user_id']]);
-                $newData[] = ['ad_model' => 1, 'title' => $adImagesV['title'], 'cover' => M3u8CacheRepository::getImageUrl($adImagesV['cover']), 'link' => $link, 'scheme' => $adImagesV['scheme'], 'resolution' => $adImagesV['resolution']];
-            }
-        }
-        return json_success($newData);
-    }
-}

+ 0 - 60
runtime/container/proxy/Modules_Api_Controllers_CategoryController.proxy.php

@@ -1,60 +0,0 @@
-<?php
-
-/**
- * 视频分类控制器.
- *
- * @author nj <nj@gmail.com>
- * @date   2020-01-22 09:37:54
- */
-declare (strict_types=1);
-namespace Modules\Api\Controllers;
-
-use App\Repositories\CategoryRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-class CategoryController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 获取导航
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @param CategoryRepository $categoryRepository
-     * @return void
-     */
-    public function list(ValidatorFactoryInterface $validatorFactory, CategoryRepository $categoryRepository)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['parent_id' => 'nullable|int', 'type' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $categoryData = $categoryRepository->allCategory($inputData['type']);
-        return json_success($categoryData);
-    }
-    public function tagList(ValidatorFactoryInterface $validatorFactory, CategoryRepository $categoryRepository)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['is_hot' => 'nullable|int', 'type' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $isHot = '';
-        if (isset($inputData['is_hot'])) {
-            $isHot = $inputData['is_hot'];
-        }
-        $tagData = $categoryRepository->getTag($inputData['type'], $isHot);
-        return json_success($tagData);
-    }
-}

+ 0 - 108
runtime/container/proxy/Modules_Api_Controllers_CodeController.proxy.php

@@ -1,108 +0,0 @@
-<?php
-
-/**
- * 兑换码控制器.
- * @author ningque
- * @date   2020-02-19 21:13:09
- */
-declare (strict_types=1);
-namespace Modules\Api\Controllers;
-
-use App\Model\UserModel;
-use App\Repositories\Service\QueueService;
-use App\Repositories\UserRepository;
-use Carbon\Carbon;
-use Hyperf\DbConnection\Db;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-class CodeController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 兑换码信息
-     */
-    public function info(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['code' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $code = Db::table('vip_code')->where('code', $inputData['code'])->first();
-        if (!$code) {
-            return json_fail('无效的兑换码');
-        }
-        if ($code->type == 1) {
-            //活动类
-            $isExchange = Db::table('vip_code_exchange')->where('uid', $this->getUserId())->where('cid', $code->id)->count();
-            $code->is_exchange = $isExchange ? 1 : 0;
-        } else {
-            $code->is_exchange = !$code->status ? 1 : 0;
-        }
-        return json_success($code);
-    }
-    /**
-     * 兑换码兑换
-     */
-    public function exchage(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['code' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $code = Db::table('vip_code')->where('code', $inputData['code'])->where('status', 1)->first();
-        if (!$code) {
-            return json_fail('无效的兑换码或兑换码已被兑换');
-        }
-        if ($code->expire < date('Y-m-d')) {
-            return json_fail('该兑换码已过期');
-        }
-        $user_code = $this->getUserId();
-        Db::beginTransaction();
-        if ($code->type == 1) {
-            //活动类
-            $limit = Db::table('vip_code_exchange')->where('cid', $code->id)->count();
-            if ($limit > $code->limit) {
-                return json_fail('该兑换码已达上限');
-            }
-            $isExchange = Db::table('vip_code_exchange')->where('uid', $user_code)->where('cid', $code->id)->count();
-            if ($isExchange) {
-                return json_fail('你已经兑换了该活动码');
-            }
-            $insert = Db::table('vip_code_exchange')->insert(['uid' => $user_code, 'cid' => $code->id, 'created_at' => Carbon::now()->toDateTimeString()]);
-            $code->is_exchange = 1;
-        } else {
-            Db::table('vip_code')->where('code', $inputData['code'])->update(['status' => '0']);
-            $code->is_exchange = 1;
-        }
-        $userInfo = make(UserRepository::class)->getUserInfoFromCache($user_code);
-        if ($userInfo['is_vip'] == 'y') {
-            $vipTime = Carbon::parse($userInfo['vip_expired'])->addDays($code->day)->toDateTimeString();
-        } else {
-            $vipTime = Carbon::now()->addDays($code->day)->toDateTimeString();
-        }
-        $result = UserModel::query()->where('code', $user_code)->update(['vip_expired' => $vipTime]);
-        if ($result) {
-            // 加mongodb兑换日志
-            make(QueueService::class)->addExchangeCodeJob(['nick' => $userInfo['nick'], 'user_id' => $userInfo['id'], 'user_code' => $userInfo['code'], 'code' => $code->code, 'title' => $code->title, 'day' => $code->day]);
-            Db::commit();
-        } else {
-            Db::rollBack();
-            return json_fail('兑换失败');
-        }
-        make(UserRepository::class)->delUserCache($user_code);
-        return json_success($code);
-    }
-}

+ 0 - 64
runtime/container/proxy/Modules_Api_Controllers_CoinsController.proxy.php

@@ -1,64 +0,0 @@
-<?php
-
-/**
- * 金币套餐控制器.
- * @author zhangjunbao <junbaoz1314@gmail.com>
- * @date   2020-01-29 10:13:09
- */
-declare (strict_types=1);
-namespace Modules\Api\Controllers;
-
-use App\Repositories\CoinsRepository;
-use App\Repositories\Service\PaymentService;
-use App\Repositories\UserRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-class CoinsController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 金币套餐页面接口
-     * @param CoinsRepository $coinsRepository
-     * @return mixed
-     */
-    public function lists(CoinsRepository $coinsRepository)
-    {
-        $userInfo = make(UserRepository::class)->getUserInfoFromCache($this->getUserId());
-        $result = $coinsRepository->getUserCoinsPackageData($userInfo['device_type']);
-        return json_success($result);
-    }
-    /**
-     * 购买金币套餐
-     * @param CoinsRepository $coinsRepository
-     * @return mixed
-     */
-    public function buycoins(CoinsRepository $coinsRepository)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['coin_id' => 'required|integer', 'pay_id' => 'required|integer', 'pay_type' => 'integer'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $inputData['user_id'] = $this->getUserId();
-        $order = $coinsRepository->createCoinsOrder($inputData);
-        if ($order) {
-            //去生成支付链接
-            $order['order_type'] = 2;
-            $payLink = make(PaymentService::class)->getGateway($order, $inputData['pay_id']);
-            if ($payLink) {
-                $data = array('jump' => 'y', 'link' => checkPayUrl($payLink));
-                return json_success($data);
-            }
-        }
-        return json_fail('亲,请重试');
-    }
-}

+ 0 - 138
runtime/container/proxy/Modules_Api_Controllers_CommentController.proxy.php

@@ -1,138 +0,0 @@
-<?php
-
-/**
- * 评论控制器.
- *
- * @author zhangjunbao <junbaoz1314@gmail.com>
- * @date   2020-01-28 20:18:54
- */
-declare (strict_types=1);
-namespace Modules\Api\Controllers;
-
-use App\Constants\CommentConstant;
-use App\Constants\CommonConstant;
-use App\Repositories\CommentRepository;
-use App\Repositories\Criterias\CommentCriteria;
-use App\Repositories\Criterias\OrderLimitCriteria;
-use App\Repositories\Service\CommonService;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Api\Responses\CommentPagesResponse;
-use Modules\Manage\Responses\CommonSuccessPkResponse;
-class CommentController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 评论列表.
-     * @return mixed|CommentPagesResponse
-     */
-    public function lists()
-    {
-        $inputData = $this->getJsonData();
-        $rules = [
-            'page' => 'nullable|integer',
-            'page_size' => 'nullable|integer',
-            'module' => 'nullable|max:60',
-            'svalue' => 'nullable|max:64',
-            'user_id' => 'nullable|max:32',
-            'top_type' => 'nullable|string',
-            // all, only_top, not_top
-            'parent_id' => 'nullable|integer',
-        ];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['created_at', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommentConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommentConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommentConstant::PAGE_SIZE;
-        }
-        $userCode = $this->getUserId();
-        $plusParams = [];
-        $commentRepo = make(CommentRepository::class);
-        $commentRepo2 = clone $commentRepo;
-        $lists = $commentRepo->pushCriteria(new CommentCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        $checkResult = $commentRepo2->checkPermission($userCode, $inputData['module']);
-        $plusParams['check_permission'] = $checkResult;
-        return new CommentPagesResponse($lists, $plusParams);
-    }
-    /**
-     * 创建评论.
-     * @return mixed|CommonSuccessPkResponse
-     */
-    public function write()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['module' => 'required|max:60', 'svalue' => 'required|max:64', 'subject' => 'nullable|max:255', 'content' => 'required', 'parent_id' => 'nullable|integer'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $userId = $this->getUserId();
-        $checkResult = make(CommentRepository::class)->checkPermission($userId, 'video');
-        if (!$checkResult['check_result']) {
-            $failMessage = sprintf('今日已发布评论 %s/%s 条   会员充值 解锁更多评论权限', $checkResult['posted'], $checkResult['amount']);
-            return json_fail($failMessage, 500, $checkResult);
-        }
-        $module = strval(data_get($inputData, 'module', ''));
-        $svalue = strval(data_get($inputData, 'svalue', ''));
-        $subject = strval(data_get($inputData, 'subject', ''));
-        $content = strval(data_get($inputData, 'content', ''));
-        $parent_id = intval(data_get($inputData, 'parent_id', 0));
-        $commonService = make(CommonService::class);
-        if (!empty($content)) {
-            // 过滤敏感词.
-            $content = $commonService->filterString($content);
-        }
-        $setarr = ['user_id' => $userId, 'module' => $module, 'svalue' => $svalue, 'subject' => $subject, 'content' => $content, 'parent_id' => $parent_id];
-        $item = make(CommentRepository::class)->createComment($setarr);
-        if (empty($item->id)) {
-            return json_fail('评论失败了');
-        }
-        $result = ['result' => 'success', 'id' => $item->id, 'amount' => $checkResult['amount'], 'posted' => $checkResult['posted'] + 1];
-        return json_success($result);
-    }
-    /**
-     * 点赞支持.
-     * @return mixed|CommonSuccessPkResponse
-     */
-    public function support()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|integer'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $id = intval(data_get($inputData, 'id', 0));
-        $item = make(CommentRepository::class)->find($id);
-        if (!$item) {
-            return json_fail('点赞失败哦');
-        }
-        $item->total_support = intval($item->total_support) + 1;
-        $result = $item->save();
-        if (!$result) {
-            return json_fail('点赞失败了');
-        }
-        $logSubject = '评论点赞';
-        $logSvalue = $id;
-        $this->log($logSubject, $logSvalue);
-        return new CommonSuccessPkResponse($id);
-    }
-}

+ 0 - 600
runtime/container/proxy/Modules_Api_Controllers_CreatorController.proxy.php

@@ -1,600 +0,0 @@
-<?php
-
-namespace Modules\Api\Controllers;
-
-use App\Constants\CreatorConstant;
-use App\Model\TypeModel;
-use App\Model\TypeVideoModel;
-use App\Model\VideoModel;
-use App\Repositories\ConfigRepoistory;
-use App\Repositories\CreatorRepository;
-use App\Repositories\CreatorRuleRepository;
-use App\Repositories\UserRepository;
-use App\Repositories\Utils\M3u8CacheRepository;
-use App\Repositories\Utils\MediaCenterRepository;
-use App\Repositories\VideoRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-class CreatorController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    // 创作者中心
-    public function center()
-    {
-        $result = [
-            'level' => 0,
-            'count_up' => 0,
-            // 上架作品数.
-            'count_down' => 0,
-            // 下架作品数
-            'count_reject' => 0,
-            // 拒绝作品数
-            'count_checking' => 0,
-            // 审核中作品数
-            'total_creator' => 0,
-            // 多少创作者
-            'tutorial' => [],
-            'course' => [],
-            'top_week' => [],
-            // 收益月榜单
-            'top_all' => [],
-            // 收益总计榜单
-            'upload_is_maintenance' => false,
-            // 上传是否维护中
-            'upload_maintenance_desc' => '',
-        ];
-        $userCode = $this->getUserId();
-        $userRepo = make(UserRepository::class);
-        $userInfo = $userRepo->getUserInfoFromCache($userCode);
-        $creatorRepo = make(CreatorRepository::class);
-        $configRepo = make(ConfigRepoistory::class);
-        $detail = $creatorRepo->detail($userCode);
-        $level = 0;
-        if (!empty($detail)) {
-            $level = intval($detail->level);
-        }
-        $countUp = $creatorRepo->countVideoByStatusType($userCode, 'up');
-        $countDown = $creatorRepo->countVideoByStatusType($userCode, 'down');
-        $countReject = $creatorRepo->countVideoByStatusType($userCode, 'reject');
-        $countChecking = $creatorRepo->countVideoByStatusType($userCode, 'checking');
-        $totalCreator = $creatorRepo->countCreator();
-        // 攻略
-        $tutorial = [['cover' => '', 'title' => '剪辑创作技巧', 'scheme' => 'url://', 'link' => 'http://h5.py163.xyz/' . env('STATIC_DIR_NAME') . '/creator/jiqiao.html'], ['cover' => '', 'title' => '剪辑工具推荐', 'scheme' => 'url://', 'link' => 'http://h5.py163xyz/' . env('STATIC_DIR_NAME') . '/creator/gongju.html']];
-        // 教程出品
-        $course = [['cover' => '', 'title' => '如何利用视频盈利', 'scheme' => 'url://', 'link' => 'http://h5.py163xyz/' . env('STATIC_DIR_NAME') . '/creator/zhuanqian.html'], ['cover' => '', 'title' => '如何直走高质量视频', 'scheme' => 'url://', 'link' => 'http://h5.py163xyz/' . env('STATIC_DIR_NAME') . '/creator/tigao.html']];
-        $result['level'] = $level;
-        $result['count_up'] = $countUp;
-        $result['count_down'] = $countDown;
-        $result['count_reject'] = $countReject;
-        $result['count_checking'] = $countChecking;
-        $result['total_creator'] = $totalCreator;
-        $result['tutorial'] = $tutorial;
-        $result['course'] = $course;
-        $topWeekItems = $creatorRepo->getTopIncome('week', 5, false);
-        $topAllItems = $creatorRepo->getTopIncome('all', 5, false);
-        // TODO 过段时间,换成上面真实的数据.
-        //        $topWeekItems = $creatorRepo->fakeTopIncome('week', true);
-        //        $topAllItems = $creatorRepo->fakeTopIncome('all', true);
-        if (!empty($topWeekItems)) {
-            foreach ($topWeekItems as &$v) {
-                $v['avatar'] = M3u8CacheRepository::getImageUrl($v['avatar']);
-            }
-        }
-        if (!empty($topAllItems)) {
-            foreach ($topAllItems as &$v) {
-                $v['avatar'] = M3u8CacheRepository::getImageUrl($v['avatar']);
-            }
-        }
-        $result['top_week'] = !empty($topWeekItems) ? $topWeekItems : [];
-        $result['top_all'] = !empty($topAllItems) ? $topAllItems : [];
-        if (isset($userInfo['is_vip']) && $userInfo['is_vip'] != 'y') {
-            $result['upload_is_maintenance'] = true;
-            $result['upload_maintenance_desc'] = '会员VIP才可以上传视频赚钱哦!';
-        }
-        $arrConfig = $configRepo->gets(['upload_maintenance_status', 'upload_maintenance_desc'], 'sys', []);
-        if (isset($arrConfig['upload_maintenance_status']) && intval($arrConfig['upload_maintenance_status']) == 1) {
-            $result['upload_is_maintenance'] = true;
-            $result['upload_maintenance_desc'] = $arrConfig['upload_maintenance_desc'] ?? '上传维护中,请稍后恢复再试';
-        }
-        return json_success($result);
-    }
-    //等级中心
-    public function levelCenter()
-    {
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $userCode = $this->getUserId();
-        $userRepo = make(UserRepository::class);
-        $arrUserInfo = $userRepo->getUserInfoData($userCode);
-        $ruleRepo = make(CreatorRuleRepository::class);
-        $creatorRepo = make(CreatorRepository::class);
-        $detail = $creatorRepo->detail($userCode);
-        $income = 0;
-        // 当前收入, 提现会从累计里扣除算出来的.
-        $totalIncome = 0;
-        // 累计收入
-        $level = 0;
-        $dayAddonNum = 0;
-        if (!empty($detail)) {
-            $income = floatval($detail->income);
-            $totalIncome = floatval($detail->total_income);
-            $level = intval($detail->level);
-            $dayAddonNum = intval($detail->day_addon_num);
-        }
-        $ruleTable = $ruleRepo->getRules();
-        $level0Rule = $ruleTable[0];
-        if (!empty($ruleTable)) {
-            foreach ($ruleTable as &$v) {
-                $v['day_addon_num'] = $dayAddonNum;
-                unset($v['deduction_scale']);
-            }
-        }
-        $ruleText = <<<EOT
-1.申请创作者需上传并审核通过上架%s部短视频;
-2.视频总收益满足条件即可升级;
-3.未认证用户分成比例为%s%%;
-4.一旦发现上传的视频不符合规则或滥竽充数,则取消创作者资格;
-5.上传视频依据创作者等级有不同数量限制,每日上传限制于每日零点清除重计。
-6.视频出售获得的金币会自动转化成现金收益(可在我的钱包-账单-现金明细里查看),10金币=1元。
-7.邀请可以永久增加每日上传次数限制,邀请3人--增加1次,10人--2次,30人--3次,80人--5次,120人--6次,200人--9次
-EOT;
-        $ruleText = sprintf($ruleText, CreatorConstant::LEVEL0_1_VIDEO_NUM, $level0Rule['commission_ratio']);
-        $ruleText = trim($ruleText);
-        $result = ['user_code' => $userCode, 'nick' => !empty($detail->user->nick) ? $detail->user->nick : '', 'total_income' => $totalIncome, 'level' => $level, 'published_video' => $creatorRepo->countPublishedVideo($userCode), 'require_video' => CreatorConstant::APPLY_REQUIRE_VIDEO, 'total_like' => $creatorRepo->sumLikedVideo($userCode), 'require_like' => CreatorConstant::APPLY_REQUIRE_LIKE, 'rule_text' => $ruleText, 'rule_table' => $ruleTable];
-        return json_success($result);
-    }
-    // 申请创作者
-    public function apply()
-    {
-        $userCode = $this->getUserId();
-        $userRepo = make(UserRepository::class);
-        $arrUserInfo = $userRepo->getUserInfoData($userCode);
-        $ruleRepo = make(CreatorRuleRepository::class);
-        $creatorRepo = make(CreatorRepository::class);
-        $detail = $creatorRepo->detail($userCode);
-        $level = 0;
-        if (!empty($detail)) {
-            $level = intval($detail->level);
-        }
-        if ($level != 0) {
-            return json_fail('您已经是创作者了,无需再申请');
-        } else {
-            if (!empty($detail)) {
-                if ($detail->status == 3) {
-                    return json_fail('请耐心等待,正在审核中,如需加急请联系客服');
-                } elseif ($detail->status == 2) {
-                    return json_fail('申请已被拒绝');
-                }
-            }
-        }
-        $publishedVideo = $creatorRepo->countPublishedVideo($userCode);
-        if ($publishedVideo < CreatorConstant::APPLY_REQUIRE_VIDEO) {
-            return json_fail('作品数不足', 6001);
-        }
-        $creatorRepo->applyToUncheck($userCode);
-        return json_success(['result' => 'success', 'msg' => '申请成功,等待审核']);
-    }
-    // 我的审核视频列表
-    public function videoPages()
-    {
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $userCode = $this->getUserId();
-        $userRepo = make(UserRepository::class);
-        $inputData = $this->getJsonData();
-        $rules = ['status_type' => 'required|in:up,down,check', 'page' => 'nullable|int', 'page_size' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $statusType = data_get($inputData, 'status_type', '');
-        $page = format_page(data_get($inputData, 'page', 1));
-        $pageSize = intval(data_get($inputData, 'page_size', 10));
-        if ($pageSize > 20) {
-            $pageSize = 20;
-        }
-        $creatorRepo = make(CreatorRepository::class);
-        $lists = $creatorRepo->videoPages($userCode, $statusType, $page, $pageSize);
-        $arrLists = $lists->toArray();
-        if (!empty($arrLists['data'])) {
-            foreach ($arrLists['data'] as &$v) {
-                $oldMu = $v['mu'];
-                $v['mu'] = '';
-                $v['cover'] = M3u8CacheRepository::getImageUrl($v['cover']);
-                $videoStatus = intval($v['status']);
-                $videoCheck = intval($v['check']);
-                $income = 0.0;
-                $totalBuy = 0;
-                $v['status_text'] = '未知状态';
-                if ($videoStatus == 1 && $videoCheck == 1) {
-                    $v['status_text'] = '上架';
-                    $v['mu'] = M3u8CacheRepository::getVideoInnerUrl($oldMu, $userCode, $v['id'], 'video');
-                    $incomeData = $creatorRepo->oneVideoIncome($userCode, $v['id']);
-                    $income = isset($incomeData['sum']) ? $incomeData['sum'] : 0;
-                    $totalBuy = $creatorRepo->countVideoBuyer($v['id']);
-                } elseif ($videoStatus == 2 && $videoCheck == 1) {
-                    $v['status_text'] = '下架';
-                    $incomeData = $creatorRepo->oneVideoIncome($userCode, $v['id']);
-                    $income = isset($incomeData['sum']) ? $incomeData['sum'] : 0;
-                    $totalBuy = $creatorRepo->countVideoBuyer($v['id']);
-                } elseif ($videoCheck == 0) {
-                    $v['status_text'] = '审核中';
-                    $v['cover'] = '';
-                    if ($videoStatus == 3) {
-                        $v['status_text'] = '转码中';
-                    } elseif ($videoStatus == 4) {
-                        $v['status_text'] = '转码失败';
-                    }
-                } elseif ($videoCheck == 2) {
-                    $v['status_text'] = '拒绝';
-                } else {
-                    $v['cover'] = '';
-                }
-                $v['income'] = $income;
-                // 收益.
-                $v['total_buy'] = $totalBuy;
-                // 购买人次
-            }
-        }
-        return json_success($arrLists);
-    }
-    public function todayVideo()
-    {
-        $userCode = $this->getUserId();
-        $userRepo = make(UserRepository::class);
-        $arrUserInfo = $userRepo->getUserInfoData($userCode);
-        $ruleRepo = make(CreatorRuleRepository::class);
-        $creatorRepo = make(CreatorRepository::class);
-        $detail = $creatorRepo->detail($userCode);
-        $income = 0;
-        $level = 0;
-        $dayAddonNum = 0;
-        $dayVideo = 0;
-        if (!empty($detail)) {
-            $income = floatval($detail->income);
-            $level = intval($detail->level);
-            $dayAddonNum = intval($detail->day_addon_num);
-            $dayVideo = intval($detail->day_video);
-        }
-        $ruleLevel = $ruleRepo->getRuleByLevel($level);
-        $dayMaxVideo = intval($ruleLevel->day_max_video) + $dayAddonNum;
-        $todayVideo = $dayVideo;
-        $isCanUpload = true;
-        if ($todayVideo >= $dayMaxVideo) {
-            $isCanUpload = false;
-        }
-        $isCanUploadCoin = isset($detail->coin_uper) ? boolval($detail->coin_uper) : false;
-        // 是否能传收费视频
-        $needUploadFreeNum = 0;
-        // 还需要上传免费视频个数.
-        $countFreeVideos = $creatorRepo->countPublishedCoinVideo($userCode, true);
-        // 统计免费视频个数
-        $countNotFreeVideos = $creatorRepo->countPublishedCoinVideo($userCode, false);
-        //统计收费视频个数
-        if ($level <= 0) {
-            if (CreatorConstant::LEVEL_0_FREE_VIDEO_NUM > 0) {
-                // 金币视频 x 免费要求 = 最低历史上传免费个数
-                $leastFreeNum = $countNotFreeVideos > 0 ? $countNotFreeVideos * CreatorConstant::LEVEL_0_FREE_VIDEO_NUM : CreatorConstant::LEVEL_0_FREE_VIDEO_NUM;
-                if ($countFreeVideos >= $leastFreeNum) {
-                    $isCanUploadCoin = true;
-                } else {
-                    $needUploadFreeNum = $leastFreeNum - $countFreeVideos;
-                }
-            } else {
-                $isCanUploadCoin = true;
-            }
-        } else {
-            if (CreatorConstant::FREE_VIDEO_NUM > 0) {
-                // 金币视频 x 免费要求 = 最低限制上传免费个数
-                $leastFreeNum = $countNotFreeVideos > 0 ? $countNotFreeVideos * CreatorConstant::FREE_VIDEO_NUM : CreatorConstant::FREE_VIDEO_NUM;
-                if ($countFreeVideos >= $leastFreeNum) {
-                    $isCanUploadCoin = true;
-                } else {
-                    $needUploadFreeNum = $leastFreeNum - $countFreeVideos;
-                }
-            } else {
-                $isCanUploadCoin = true;
-            }
-        }
-        //        $todayideo = $creatorRepo->countTodayPublishedVideo($userCode);
-        $result = [
-            'level' => $level,
-            'day_max_video' => $dayMaxVideo,
-            'commission_ratio' => $ruleLevel->commission_ratio,
-            'today_video' => $todayVideo,
-            // 计划任务每日凌晨3点清零一次.
-            'is_can_upload' => $isCanUpload,
-            // 今天是否能上传.
-            'is_can_upload_coin' => $isCanUploadCoin,
-            'need_upload_free_num' => $needUploadFreeNum,
-            'count_free_videos' => $countFreeVideos,
-            'count_not_free_videos' => $countNotFreeVideos,
-        ];
-        // TODO
-        //        $result['is_can_upload'] = false;
-        //        $result['is_can_upload_coin'] = false;
-        return json_success($result);
-    }
-    public function createVideo()
-    {
-        // TODO
-        //        return json_fail('视频服务器正在扩容,预计2022-04-25日晚间恢复');
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $userCode = $this->getUserId();
-        $userRepo = make(UserRepository::class);
-        $userInfo = $userRepo->getUserInfoFromCache($userCode);
-        if (isset($userInfo['is_vip']) && $userInfo['is_vip'] != 'y') {
-            return json_fail('会员VIP才可以上传视频赚钱哦!');
-        }
-        $inputData = $this->getJsonData();
-        $rules = [
-            'title' => 'required',
-            'cover' => 'nullable|max:700',
-            'coins' => 'required|int',
-            'tags' => 'required',
-            // 这个是ID
-            'file_hash' => 'required',
-        ];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $videoRepo = make(VideoRepository::class);
-        if ($videoRepo->checkExist($inputData['file_hash'])) {
-            return json_fail('此视频已被其他人上传过,请重新更换');
-        }
-        $mediaCenterRepo = make(MediaCenterRepository::class);
-        $hashVideoInfo = $mediaCenterRepo->getHashInfo($inputData['file_hash']);
-        if (!empty($hashVideoInfo)) {
-            return json_fail('此视频有人上传过了,请重新更换');
-        }
-        $ruleRepo = make(CreatorRuleRepository::class);
-        $creatorRepo = make(CreatorRepository::class);
-        $detail = $creatorRepo->detail($userCode);
-        $level = 0;
-        $dayAddonNum = 0;
-        $dayVideo = 0;
-        if (!empty($detail)) {
-            $level = intval($detail->level);
-            $dayAddonNum = intval($detail->day_addon_num);
-            $dayVideo = intval($detail->day_video);
-        } else {
-            // 自动申请为原创者.
-            $detail = $creatorRepo->applyToUncheck($userCode);
-            $level = intval($detail->level);
-        }
-        $ruleLevel = $ruleRepo->getRuleByLevel($level);
-        $dayMaxVideo = intval($ruleLevel->day_max_video) + $dayAddonNum;
-        $todayVideo = !empty($detail) ? $dayVideo : 0;
-        if ($todayVideo >= $dayMaxVideo) {
-            return json_fail('今日已经超出上传数量限制');
-        }
-        $cover = data_get($inputData, 'cover', '');
-        $coins = intval(data_get($inputData, 'coins', 0));
-        // 金币,单位数量个,10金币=1元人民币
-        $uploadingUrl = '';
-        // TODO,这里可以做一个固定视频,等待用户上传转码中.
-        if ($coins < 0) {
-            $coins = 0;
-        }
-        if ($coins > CreatorConstant::VIDEO_SELL_MAX_COIN) {
-            return json_fail('售卖金币价格太大,可以提前联系客服');
-        }
-        $arrTagIds = [];
-        $tmpTagIds = data_get($inputData, 'tags', '');
-        if (is_string($tmpTagIds)) {
-            $arrTagIds = explode(',', $tmpTagIds);
-        } else {
-            $arrTagIds = $tmpTagIds;
-        }
-        if (!empty($arrTagIds)) {
-            $arrTagIds = array_filter($arrTagIds);
-            $arrTagIds = array_unique($arrTagIds);
-        }
-        if (empty($arrTagIds)) {
-            return json_fail('请选择至少1个口味');
-        }
-        if (count($arrTagIds) > CreatorConstant::VIDEO_TAG_MAX_NUM) {
-            return json_fail('最多选择' . strval(CreatorConstant::VIDEO_TAG_MAX_NUM) . '个口味');
-        }
-        // 处理关联标签.
-        $tagIdsRaltion = [];
-        $tagNames = [];
-        if (!empty($arrTagIds)) {
-            foreach ($arrTagIds as $v) {
-                $tagObj = TypeModel::query()->where('id', $v)->first();
-                if (!empty($tagObj->id)) {
-                    $tagIdsRaltion[] = $tagObj->id;
-                    $tagNames[] = $tagObj->title;
-                }
-            }
-        }
-        $isCanUploadCoin = isset($detail->coin_uper) ? boolval($detail->coin_uper) : false;
-        // 是否能传收费视频
-        $needUploadFreeNum = 0;
-        // 还需要上传免费视频个数.
-        $countFreeVideos = $creatorRepo->countPublishedCoinVideo($userCode, true);
-        // 统计免费视频个数
-        $countNotFreeVideos = $creatorRepo->countPublishedCoinVideo($userCode, false);
-        //统计收费视频个数
-        if ($level <= 0) {
-            if (CreatorConstant::LEVEL_0_FREE_VIDEO_NUM > 0) {
-                // 金币视频 x 免费要求 = 最低历史上传免费个数
-                $leastFreeNum = $countNotFreeVideos > 0 ? $countNotFreeVideos * CreatorConstant::LEVEL_0_FREE_VIDEO_NUM : CreatorConstant::LEVEL_0_FREE_VIDEO_NUM;
-                if ($countFreeVideos >= $leastFreeNum) {
-                    $isCanUploadCoin = true;
-                } else {
-                    $needUploadFreeNum = $leastFreeNum - $countFreeVideos;
-                }
-            } else {
-                $isCanUploadCoin = true;
-            }
-        } else {
-            if (CreatorConstant::FREE_VIDEO_NUM > 0) {
-                // 金币视频 x 免费要求 = 最低限制上传免费个数
-                $leastFreeNum = $countNotFreeVideos > 0 ? $countNotFreeVideos * CreatorConstant::FREE_VIDEO_NUM : CreatorConstant::FREE_VIDEO_NUM;
-                if ($countFreeVideos >= $leastFreeNum) {
-                    $isCanUploadCoin = true;
-                } else {
-                    $needUploadFreeNum = $leastFreeNum - $countFreeVideos;
-                }
-            } else {
-                $isCanUploadCoin = true;
-            }
-        }
-        if ($coins > 0 && !$isCanUploadCoin) {
-            return json_fail('还不能上传收费视频,请先再传' . strval($needUploadFreeNum) . '个免费视频');
-        }
-        $payType = 2;
-        // 默认金币
-        if ($coins == 0) {
-            $payType = 1;
-            // vip
-        }
-        $newStrTagNames = !empty($tagNames) ? implode(',', $tagNames) : '';
-        $newStrTagIds = !empty($arrTagIds) ? implode(',', $arrTagIds) : '';
-        $setarr = ['uid' => $userCode, 'status' => 3, 'check' => 0, 'pay_type' => $payType, 'type' => 1, 'mu' => $uploadingUrl, 'title' => trim(data_get($inputData, 'title', '')), 'cover' => $cover, 'coins' => $coins, 'tags' => $newStrTagNames, 'file_hash' => data_get($inputData, 'file_hash', ''), 'custom_cover' => $cover];
-        $videoObj = VideoModel::query()->create($setarr);
-        if ($videoObj) {
-            $videoId = $videoObj->id;
-            if (!empty($tagIdsRaltion)) {
-                foreach ($tagIdsRaltion as $tagId) {
-                    $setarr2 = ['type_id' => $tagId, 'video_id' => $videoId, 'status' => 1];
-                    TypeVideoModel::query()->create($setarr2);
-                }
-            }
-            // 累加今日上传视频数量.
-            $detail->day_video++;
-            $detail->save();
-        } else {
-            return json_fail('创建视频失败');
-        }
-        $result = ['video' => [
-            'id' => $videoObj->id,
-            // 给前端的。前端拿到这个, 拼接 app应用全称(媒资库里定义的)| 模块名 | 视频ID ,doukui|video|video_id
-            'title' => $setarr['title'],
-            'coins' => $setarr['coins'],
-            'cover' => '',
-            // 这里ppvod的是暴露的jpg路径,不能用,直接访问空字符串
-            'tag_names' => $newStrTagNames,
-            'tag_ids' => $newStrTagIds,
-        ]];
-        return json_success($result);
-    }
-    /**
-     * 上传设置描述
-     * @return array
-     */
-    public function uploadSetting()
-    {
-        $configRepo = make(ConfigRepoistory::class);
-        $creatorRepo = make(CreatorRepository::class);
-        $userCode = $this->getUserId();
-        $detail = $creatorRepo->detail($userCode);
-        $level = 0;
-        if (!empty($detail)) {
-            $level = intval($detail->level);
-        }
-        $fileMaxSizeMb = CreatorConstant::VIDEO_MAX_SIZE_MB;
-        // 文件最大多少MB
-        $maxCoin = CreatorConstant::VIDEO_SELL_MAX_COIN;
-        // 最多设置金币个数
-        $creatorMinVideoNum = CreatorConstant::FREE_VIDEO_NUM;
-        // 创作者,level>0
-        $normalMinVideoNum = CreatorConstant::LEVEL_0_FREE_VIDEO_NUM;
-        // 普通人, level=0
-        $maxTagNum = CreatorConstant::VIDEO_TAG_MAX_NUM;
-        // 最多选择标签个数.
-        $agreementLink = 'http://h5.py163xyz/' . env('STATIC_DIR_NAME') . '/creator/upload_agreement.html';
-        $tags = $creatorRepo->canUseTags();
-        $ppvodParams = $configRepo->gets(['ppvod_upload_category', 'ppvod_upload_tpl_id', 'ppvod_upload_tpl_name'], 'sys', []);
-        $isCanUploadCoin = isset($detail->coin_uper) ? boolval($detail->coin_uper) : false;
-        // 是否能传收费视频
-        $needUploadFreeNum = 0;
-        // 还需要上传免费视频个数.
-        $countFreeVideos = $creatorRepo->countPublishedCoinVideo($userCode, true);
-        // 统计免费视频个数
-        $countNotFreeVideos = $creatorRepo->countPublishedCoinVideo($userCode, false);
-        //统计收费视频个数
-        if ($level <= 0) {
-            if (CreatorConstant::LEVEL_0_FREE_VIDEO_NUM > 0) {
-                // 金币视频 x 免费要求 = 最低历史上传免费个数
-                $leastFreeNum = $countNotFreeVideos > 0 ? $countNotFreeVideos * CreatorConstant::LEVEL_0_FREE_VIDEO_NUM : CreatorConstant::LEVEL_0_FREE_VIDEO_NUM;
-                if ($countFreeVideos >= $leastFreeNum) {
-                    $isCanUploadCoin = true;
-                } else {
-                    $needUploadFreeNum = $leastFreeNum - $countFreeVideos;
-                }
-            } else {
-                $isCanUploadCoin = true;
-            }
-        } else {
-            if (CreatorConstant::FREE_VIDEO_NUM > 0) {
-                // 金币视频 x 免费要求 = 最低限制上传免费个数
-                $leastFreeNum = $countNotFreeVideos > 0 ? $countNotFreeVideos * CreatorConstant::FREE_VIDEO_NUM : CreatorConstant::FREE_VIDEO_NUM;
-                if ($countFreeVideos >= $leastFreeNum) {
-                    $isCanUploadCoin = true;
-                } else {
-                    $needUploadFreeNum = $leastFreeNum - $countFreeVideos;
-                }
-            } else {
-                $isCanUploadCoin = true;
-            }
-        }
-        $coverDesc = <<<EOT
-1. 封面可以选,若不上传则以第一帧为封面。推荐你自己上传封面,更吸引用户.
-2. 视频小于%sM
-3. 视频暂不限制时长.
-4. 视频不可带有广告性质水印!
-EOT;
-        $coverDesc = sprintf($coverDesc, $fileMaxSizeMb);
-        $coverDesc = trim($coverDesc);
-        $priceDesc = <<<EOT
-1. 为维护观看体验,视频金币价格不得超过%s个金币.
-2. 创作者每上传%s个免费视频(审核通过并上架才算),即可上传一个收费视频.
-3. 普通用户上传%s个免费视频,可上传一个收费视频.
-EOT;
-        $priceDesc = sprintf($priceDesc, $maxCoin, $creatorMinVideoNum, $normalMinVideoNum);
-        $priceDesc = trim($priceDesc);
-        $result = ['cover_desc' => $coverDesc, 'price_desc' => $priceDesc, 'file_max_size_mb' => $fileMaxSizeMb, 'max_coin' => $maxCoin, 'creator_min_video_num' => $creatorMinVideoNum, 'normal_min_video_num' => $normalMinVideoNum, 'max_tag_num' => $maxTagNum, 'tags' => $tags, 'agreement_link' => $agreementLink, 'is_can_upload_coin' => $isCanUploadCoin, 'need_upload_free_num' => $needUploadFreeNum, 'count_free_videos' => $countFreeVideos, 'count_not_free_videos' => $countNotFreeVideos, 'ppvod_upload_category' => !empty($ppvodParams['ppvod_upload_category']) ? $ppvodParams['ppvod_upload_category'] : '用户上传', 'ppvod_upload_tpl_id' => !empty($ppvodParams['ppvod_upload_tpl_id']) ? $ppvodParams['ppvod_upload_tpl_id'] : '', 'ppvod_upload_tpl_name' => !empty($ppvodParams['ppvod_upload_tpl_name']) ? $ppvodParams['ppvod_upload_tpl_name'] : '默认'];
-        // TODO
-        //        $result['file_max_size_mb'] = 1;
-        return json_success($result);
-    }
-    /**
-     * 删除视频.
-     * @return mixed
-     * @throws \Exception
-     */
-    public function deleteVideo()
-    {
-        $creatorRepo = make(CreatorRepository::class);
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['video_id' => 'required', 'force_state' => 'nullable|in:yes,no'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $isForce = false;
-        $videoId = data_get($inputData, 'video_id', '');
-        $forceState = data_get($inputData, 'force_state', 'no');
-        if ($forceState == 'yes') {
-            $isForce = true;
-        }
-        $deleteStatus = $creatorRepo->deleteVideo($userCode, $videoId, $isForce);
-        if (!$deleteStatus) {
-            return json_fail('删除失败,请联系管理员');
-        }
-        return json_success(['result' => 'success']);
-    }
-}

+ 0 - 55
runtime/container/proxy/Modules_Api_Controllers_DemoController.proxy.php

@@ -1,55 +0,0 @@
-<?php
-
-namespace Modules\Api\Controllers;
-
-use App\Model\UserModel;
-use App\Model\VipOrderModel;
-use App\Repositories\Service\QueueService;
-use App\Repositories\UserRepository;
-use Carbon\Carbon;
-use Hyperf\HttpServer\Request;
-class DemoController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    public function vipOrder(Request $request)
-    {
-        $inputData = $request->all();
-        $orderItem = VipOrderModel::query()->where(['id' => $inputData['data']['id']])->first();
-        if (empty($orderItem)) {
-            return json_fail('没有查到测试订单');
-        }
-        $orderItem = $orderItem->toArray();
-        $package = json_decode($orderItem['package_info'], true);
-        $houseCount = 0;
-        foreach ($package['jdata']['feature'] as $packVal) {
-            if ($packVal['type'] == 'house') {
-                $houseCount = $packVal['count'];
-            }
-        }
-        //加会员天数
-        $userInfo = make(UserRepository::class)->getUserInfoFromCache($orderItem['user_code']);
-        if ($userInfo['is_vip'] == 'y') {
-            $vipTime = Carbon::parse($userInfo['vip_expired'])->addDays($orderItem['vip_days'])->toDateTimeString();
-        } else {
-            $vipTime = Carbon::now()->addDays($orderItem['vip_days'])->toDateTimeString();
-        }
-        $houseCount = $userInfo['max_open_house'] + $houseCount;
-        UserModel::query()->where('id', $orderItem['user_id'])->update(['vip_expired' => $vipTime, 'vip_level' => $orderItem['vip_id'], 'max_open_house' => $houseCount]);
-        $orderMoney = floatval($orderItem['order_amount']);
-        make(QueueService::class)->rebateUserJob(['amount' => $orderMoney, 'user_id' => $orderItem['user_code']], 1);
-        VipOrderModel::query()->where(['id' => $inputData['data']['id']])->update(['status' => 1]);
-        make(UserRepository::class)->delUserCache($orderItem['user_code']);
-        return json_success([]);
-    }
-    public function coinOrder(Request $request)
-    {
-    }
-}

+ 0 - 79
runtime/container/proxy/Modules_Api_Controllers_FeedbackController.proxy.php

@@ -1,79 +0,0 @@
-<?php
-
-/**
- * 用户反馈控制器
- */
-declare (strict_types=1);
-namespace Modules\Api\Controllers;
-
-use App\Model\FeedbackModel;
-use App\Repositories\Service\CommonService;
-use App\Repositories\UserRepository;
-use App\Repositories\Utils\M3u8CacheRepository;
-use Carbon\Carbon;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-class FeedbackController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 提交反馈
-     * @return mixed
-     */
-    public function create(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['type' => 'required|int', 'content' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $user_code = $this->getUserId();
-        $data = ['uid' => $user_code, 'type' => $inputData['type'], 'rid' => '', 'content' => $inputData['content']];
-        $create = FeedbackModel::query()->create($data);
-        if ($inputData['type'] == 2) {
-            $create->content = M3u8CacheRepository::getImageUrl($create->content);
-        }
-        $user_info = make(UserRepository::class)->getUserInfoFromCache($user_code);
-        $create->avatar = $user_info['avatar'];
-        Carbon::setLocale('zh');
-        $create->time = Carbon::parse($create->created_at)->diffForHumans();
-        unset($create->uid, $create->created_at);
-        return json_success($create);
-    }
-    /**
-     * 我的反馈列表
-     * @return mixed
-     */
-    public function list(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $result = FeedbackModel::query()->where(['uid' => $this->getUserId()])->orderByDesc('id')->paginate((int) $inputData['page_size'], ['type', 'content', 'rid', 'created_at'], 'page', (int) $inputData['page']);
-        $user_info = make(UserRepository::class)->getUserInfoFromCache($this->getUserId());
-        foreach ($result as $v) {
-            if ($v->type == 2) {
-                $v->content = M3u8CacheRepository::getImageUrl($v->content);
-            }
-            if (!$v->rid) {
-                $v->avatar = $user_info['avatar'];
-            }
-            Carbon::setLocale('zh');
-            $v->time = Carbon::parse($v->created_at)->diffForHumans();
-            unset($v->created_at);
-        }
-        return json_success($result);
-    }
-}

+ 0 - 291
runtime/container/proxy/Modules_Api_Controllers_HotelRecordController.proxy.php

@@ -1,291 +0,0 @@
-<?php
-
-namespace Modules\Api\Controllers;
-
-use App\Constants\AdConstrant;
-use App\Constants\ChangeLogConstant;
-use App\Jobs\SearchHotelLogJob;
-use App\Model\CoinsLogModel;
-use App\Model\HotelBuyLogModel;
-use App\Model\Mongo\HotelLogModel;
-use App\Model\Mongo\SearchHotelLogModel;
-use App\Repositories\ConfigRepoistory;
-use App\Repositories\Service\QueueService;
-use App\Repositories\UserRepository;
-use App\Repositories\Utils\M3u8CacheRepository;
-use Carbon\Carbon;
-use Hyperf\DbConnection\Db;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Api\Services\VideoService;
-use MongoDB\BSON\ObjectId;
-use Psr\SimpleCache\CacheInterface;
-/**
- * 酒店记录
- */
-class HotelRecordController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     *  开房记录列表
-     */
-    public function lists()
-    {
-        $hotelRecordData = [['check_id' => '61c233485b21db75075a5362', 'username' => '金卫华', 'gender' => '男', 'ct_fid' => '32010619730425XXXX', 'birthday' => '1973-XX-XX', 'check_address' => '江苏XXXX', 'check_time' => '2021-XX-XX', 'check_sex' => '女'], ['check_id' => '61c233485b21db75075a5363', 'username' => '吴雪艳', 'gender' => '女', 'ct_fid' => '33032419700106XXXX', 'birthday' => '1970-XX-XX', 'check_address' => '浙江XXXX', 'check_time' => '2021-XX-XX', 'check_sex' => '男'], ['check_id' => '61c233485b21db75075a5365', 'username' => '李昕', 'gender' => '男', 'ct_fid' => '33900519861003XXXX', 'birthday' => '1986-XX-XX', 'check_address' => '浙江XXXX', 'check_time' => '2021-XX-XX', 'check_sex' => '女'], ['check_id' => '61c233485b21db75075a5375', 'username' => '夏梦', 'gender' => '女', 'ct_fid' => '37010519870226XXXX', 'birthday' => '1987-XX-XX', 'check_address' => '延安XXXX', 'check_time' => '2021-XX-XX', 'check_sex' => '男'], ['check_id' => '61c233485b21db75075a537b', 'username' => '毛土仙', 'gender' => '女', 'ct_fid' => '33080219780220XXXX', 'birthday' => '1978-XX-XX', 'check_address' => '浙江XXXX', 'check_time' => '2021-XX-XX', 'check_sex' => '男']];
-        return json_success($hotelRecordData);
-    }
-    /**
-     *  开房记录列表
-     */
-    public function search(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['ct_fid' => 'required|string|min:15|max:18'];
-        $validator = $validatorFactory->make($inputData, $rules, ['ct_fid.required' => '身份证号码不能为空!', 'ct_fid.min' => '身份证号码最小为15位!', 'ct_fid.max' => '身份证号码最大为18位!']);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        // 开始扣除次数
-        // 查询会员是否有次数
-        $userUid = $this->getUserId();
-        $userInfo = make(UserRepository::class)->findWhere(['code' => $userUid])->first();
-        if (!$userInfo) {
-            return json_fail('验证过期');
-        }
-        $hotelBuyLog = new HotelBuyLogModel();
-        $dataArray = [
-            'check_id' => '',
-            //查询开房id
-            'user_uid' => $userUid,
-            'date' => Carbon::now()->toDateString(),
-            //查询时间
-            'created_at' => Carbon::now()->toDateTimeString(),
-            'updated_at' => Carbon::now()->toDateTimeString(),
-        ];
-        $userMsg = ['type' => 0, 'icon_or_num' => 0, 'icon' => 0];
-        // 查询总共的次数
-        if ($userInfo->max_open_house <= 0) {
-            // 查询所需金币
-            $hotelCoin = 10;
-            $userMsg['icon'] = $hotelCoin;
-            if ($userInfo->coins < $hotelCoin) {
-                return json_fail('余额不足请充值!', 201, ['data' => [], 'user_msg' => $userMsg]);
-            } else {
-                // 扣除金币
-                $dataArray['type'] = 3;
-                $dataArray['icon_or_num'] = $hotelCoin;
-                $dataArray['before'] = $userInfo->coins;
-                $dataArray['rear'] = $userInfo->coins - $hotelCoin;
-                $userInfo->coins = $userInfo->coins - $hotelCoin;
-                $userMsg['type'] = 3;
-                $userMsg['icon_or_num'] = $hotelCoin;
-                // 记录帐变使用日志
-                $changeData = ['user_uid' => $userInfo->code, 'currency_type' => ChangeLogConstant::CHANGE_COIN, 'amount' => $hotelCoin, 'way' => ChangeLogConstant::WAY_2, 'type' => ChangeLogConstant::TYPE_6];
-                Db::beginTransaction();
-                try {
-                    // 扣除用户的金币
-                    if (!$userInfo->save()) {
-                        Db::rollBack();
-                        return json_fail('-016 查询失败 联系客服!');
-                    }
-                    // 添加日志
-                    $res = $hotelBuyLog::query()->create($dataArray);
-                    if (!$res) {
-                        Db::rollBack();
-                        return json_fail('-016 查询失败 联系客服!');
-                    }
-                    make(UserRepository::class)->delUserCache($userInfo->code);
-                    Db::commit();
-                    // 帐变记录
-                    make(QueueService::class)->saveChangeLogJob($changeData);
-                } catch (\Exception $exception) {
-                    Db::rollBack();
-                    return json_fail('-016 查询失败 联系客服!');
-                }
-            }
-        } else {
-            // 扣除自己的查询次数
-            $dataArray['type'] = 2;
-            $dataArray['icon_or_num'] = 1;
-            $dataArray['before'] = $userInfo->max_open_house;
-            $dataArray['rear'] = $userInfo->max_open_house - 1;
-            $userInfo->max_open_house = $userInfo->max_open_house - 1;
-            $userMsg['type'] = 2;
-            $userMsg['icon_or_num'] = 1;
-            Db::beginTransaction();
-            try {
-                $hotelBuyLog::query()->create($dataArray);
-                $userInfo->save();
-                make(UserRepository::class)->delUserCache($userInfo->code);
-                Db::commit();
-            } catch (\Exception $exception) {
-                Db::rollBack();
-                return json_fail('-013 查询失败 联系客服!');
-            }
-        }
-        $options = ['skip' => 0, 'limit' => 5, 'sort' => ['check_time' => -1]];
-        //处理数据放redis
-        $cache = make(CacheInterface::class);
-        $hotelRecordData = $cache->remember('check_fid_list:' . $inputData['ct_fid'], 60 * 24 * 7, function () use($inputData, $options) {
-            return make(HotelLogModel::class)->db()->find(['ct_type' => 'ID', 'ct_fid' => $inputData['ct_fid']], $options)->toArray();
-        });
-        $data = [];
-        dispatch_job(new SearchHotelLogJob($this->getUserId(), $inputData['ct_fid'], $hotelRecordData ?? []));
-        //数据处理成不可视化
-        if ($hotelRecordData) {
-            foreach ($hotelRecordData as $key => $item) {
-                $check_time = 'XXXX-XX-XX';
-                $ct_fid = 'XXXXXXXX';
-                $birthday = 'XXXX-XX-XX';
-                // 处理时间
-                if (strlen($item['check_time']) > 2) {
-                    $check_time = substr($item['check_time'], 0, 4) . '-XX-XX';
-                }
-                // 处理出生日期
-                if (strlen($item['birthday']) > 2) {
-                    $birthday = substr($item['birthday'], 0, 4) . '-XX-XX';
-                }
-                // 处理身身份证
-                if (strlen($item['ct_fid']) > 2) {
-                    $ct_fid = substr($item['ct_fid'], 0, -4) . 'XXXX';
-                }
-                $data[] = [
-                    'check_id' => $item['_id']->__toString(),
-                    'username' => $item['username'],
-                    'gender' => $item['gender'] === 1 ? '男' : ($item['gender'] === 2 ? '女' : '未知'),
-                    'ct_fid' => $ct_fid,
-                    'birthday' => $birthday,
-                    'check_address' => 'XXXXXX',
-                    'check_time' => $check_time,
-                    // 同住性别
-                    'check_sex' => $item['gender'] === 2 ? '男' : '女',
-                ];
-            }
-        }
-        $resData = ['data' => $data, 'user_msg' => $userMsg];
-        return json_success($resData);
-    }
-    /**
-     * 开房详情
-     */
-    public function row(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['check_id' => 'required|string|regex:/^[a-zA-Z0-9]+$/|size:24'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        // 开始扣除次数
-        // 查询会员是否有次数
-        $userUid = $this->getUserId();
-        $userInfo = make(UserRepository::class)->findWhere(['code' => $userUid])->first();
-        if (!$userInfo) {
-            return json_fail('验证过期');
-        }
-        $hotelBuyLog = new HotelBuyLogModel();
-        $hotelBuyLogFirst = clone $hotelBuyLog;
-        $userMsg = ['type' => 0, 'icon_or_num' => 0, 'icon' => 0];
-        // 是否查询过了
-        if (!$hotelBuyLogFirst::query()->where(['user_uid' => $userUid, 'check_id' => $inputData['check_id']])->count()) {
-            $dataArray = [
-                'check_id' => $inputData['check_id'],
-                //查询开房id
-                'user_uid' => $userUid,
-                'date' => Carbon::now()->toDateString(),
-                //查询时间
-                'created_at' => Carbon::now()->toDateTimeString(),
-                'updated_at' => Carbon::now()->toDateTimeString(),
-            ];
-            // 查询总共的次数
-            // 查询所需金币
-            $configRepo = make(ConfigRepoistory::class);
-            $hotelCoin = $configRepo->get('hotel_coin', 'sys', '');
-            $userMsg['icon'] = $hotelCoin;
-            if ($userInfo->coins < $hotelCoin) {
-                return json_fail('余额不足请充值!', 201, ['data' => [], 'user_msg' => $userMsg]);
-            } else {
-                // 扣除金币
-                $dataArray['type'] = 3;
-                $dataArray['icon_or_num'] = $hotelCoin;
-                $dataArray['before'] = $userInfo->coins;
-                $dataArray['rear'] = $userInfo->coins - $hotelCoin;
-                $userInfo->coins = $userInfo->coins - $hotelCoin;
-                $userMsg['type'] = 3;
-                $userMsg['icon_or_num'] = $hotelCoin;
-                //--记录帐变使用日志
-                $changeData = ['user_uid' => $userInfo->code, 'currency_type' => ChangeLogConstant::CHANGE_COIN, 'amount' => $hotelCoin, 'way' => ChangeLogConstant::WAY_2, 'type' => ChangeLogConstant::TYPE_4];
-                Db::beginTransaction();
-                try {
-                    // 扣除用户的金币
-                    if (!$userInfo->save()) {
-                        Db::rollback();
-                        return json_fail('-016 查询失败 联系客服!');
-                    }
-                    // 添加日志
-                    $res = $hotelBuyLog::query()->create($dataArray);
-                    if (!$res) {
-                        Db::rollback();
-                        return json_fail('-016 查询失败 联系客服!');
-                    }
-                    make(UserRepository::class)->delUserCache($userInfo->code);
-                    Db::commit();
-                    // 帐变记录
-                    make(QueueService::class)->saveChangeLogJob($changeData);
-                } catch (\Exception $exception) {
-                    Db::rollBack();
-                    return json_fail('-016 查询失败 联系客服!');
-                }
-            }
-        }
-        $check_id = new ObjectId($inputData['check_id']);
-        $cache = make(CacheInterface::class);
-        $hotelRecordData = $cache->remember('check_fid_row:' . $inputData['check_id'], 60 * 24 * 7, function () use($check_id) {
-            return make(HotelLogModel::class)->db()->findOne(['_id' => $check_id]);
-        });
-        $data = [];
-        if ($hotelRecordData) {
-            $data = [
-                'username' => $hotelRecordData['username'],
-                'gender' => $hotelRecordData['gender'] === 1 ? '男' : ($hotelRecordData['gender'] === 2 ? '女' : '未知'),
-                'ct_fid' => $hotelRecordData['ct_fid'],
-                'birthday' => $hotelRecordData['birthday'],
-                'check_address' => $hotelRecordData['check_address'],
-                'check_time' => $hotelRecordData['check_time'],
-                // 同住性别
-                'check_sex' => $hotelRecordData['gender'] === 2 ? '男' : '女',
-            ];
-        }
-        $resData = ['data' => $data, 'user_msg' => $userMsg];
-        return json_success($resData);
-    }
-    public function home()
-    {
-        $userCode = $this->getUserId();
-        $ads1 = null;
-        $videoService = make(VideoService::class);
-        $adList1 = $videoService->getAdList(AdConstrant::HOTEL_HOME1);
-        if (!empty($adList1)) {
-            $ads1 = [];
-            foreach ($adList1 as $v) {
-                $link = M3u8CacheRepository::getLinkUrl($v['link'], ['user_code' => $userCode]);
-                $ads1[] = ['title' => $v['title'], 'cover' => !empty($v['cover']) ? M3u8CacheRepository::getImageUrl($v['cover']) : '', 'link' => $link, 'scheme' => $v['scheme']];
-            }
-        }
-        $detailCoin = intval(make(ConfigRepoistory::class)->get('hotel_coin', 'sys', 9999));
-        $result = [
-            'ads1' => $ads1,
-            'query_coin' => 10,
-            // 单次搜索需要金币
-            'detail_coin' => $detailCoin,
-        ];
-        return json_success($result);
-    }
-}

+ 0 - 125
runtime/container/proxy/Modules_Api_Controllers_InnerController.proxy.php

@@ -1,125 +0,0 @@
-<?php
-
-namespace Modules\Api\Controllers;
-
-use App\Jobs\Inner\ReceiveVideosJob;
-use App\Model\Mongo\HotelLogModel;
-use Hyperf\HttpServer\Request;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Psr\SimpleCache\CacheInterface;
-class InnerController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 内部通信token
-     * @var string
-     */
-    private $innerToken = 'VC4Pfzrg9nKpq';
-    public function receiveVideo(Request $request, ValidatorFactoryInterface $validatorFactory)
-    {
-        if (!$this->checkToken()) {
-            return json_fail('通信失败.');
-        }
-        $inputData = $request->all();
-        $rules = ['source_type' => 'required', 'data' => 'required|array'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        if ($inputData['source_type'] != 'video') {
-            return json_fail('通信数据类型有误');
-        }
-        if (!empty($inputData['data'])) {
-            // 异步调度.
-            dispatch_job(new ReceiveVideosJob($inputData['data']));
-        }
-        $res = ['result' => 'success'];
-        return $this->jsonSuccess($res);
-    }
-    /**
-     * 检查token合法性.
-     * @return bool
-     */
-    private function checkToken()
-    {
-        $token = request()->header('AUTH-TOKEN', '');
-        if (empty($token)) {
-            $token = request()->input('token', '');
-        }
-        return $token === $this->innerToken;
-    }
-    /**
-     * 搜索开房记录
-     * @param Request $request
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function searchHotelRecord(Request $request, ValidatorFactoryInterface $validatorFactory)
-    {
-        if (!$this->checkToken()) {
-            return json_fail('通信失败.');
-        }
-        $inputData = $request->all();
-        $rules = ['card_no' => 'required|string|max:18'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $options = ['skip' => 0, 'limit' => 5, 'sort' => ['check_time' => -1]];
-        $cache = make(CacheInterface::class);
-        $hotelRecordData = $cache->remember('check_fid_list:' . $inputData['card_no'], 60 * 24 * 7, function () use($inputData, $options) {
-            return make(HotelLogModel::class)->db()->find(['ct_type' => 'ID', 'ct_fid' => $inputData['card_no']], $options)->toArray();
-        });
-        $data = [];
-        if ($hotelRecordData) {
-            foreach ($hotelRecordData as $key => $item) {
-                $check_time = 'XXXX-XX-XX';
-                $ct_fid = 'XXXXXXXX';
-                $birthday = 'XXXX-XX-XX';
-                // 处理时间
-                if (strlen($item['check_time']) > 2) {
-                    $check_time = substr($item['check_time'], 0, 4) . '-XX-XX';
-                }
-                // 处理出生日期
-                if (strlen($item['birthday']) > 2) {
-                    $birthday = substr($item['birthday'], 0, 4) . '-XX-XX';
-                }
-                // 处理身身份证
-                if (strlen($item['ct_fid']) > 2) {
-                    $ct_fid = substr($item['ct_fid'], 0, -4) . 'XXXX';
-                }
-                $data[] = [
-                    'check_id' => $item['_id']->__toString(),
-                    'username' => $item['username'],
-                    'gender' => $item['gender'] === 1 ? '男' : ($item['gender'] === 2 ? '女' : '未知'),
-                    'ct_fid' => $ct_fid,
-                    'birthday' => $birthday,
-                    'check_address' => 'XXXXXX',
-                    'check_time' => $check_time,
-                    // 同住性别
-                    'check_sex' => $item['gender'] === 2 ? '男' : '女',
-                ];
-            }
-        }
-        return $this->jsonSuccess($data);
-    }
-    /**
-     * @param $data
-     * @return mixed
-     */
-    private function jsonSuccess($data)
-    {
-        $result = ['code' => 200, 'message' => '', 'data' => $data, 'handshake' => ''];
-        return response()->json($result);
-    }
-}

+ 0 - 27
runtime/container/proxy/Modules_Api_Controllers_KeywordsController.proxy.php

@@ -1,27 +0,0 @@
-<?php
-
-namespace Modules\Api\Controllers;
-
-use App\Repositories\KeywordsHotRepository;
-class KeywordsController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 关键词热度排行10
-     * @return mixed
-     */
-    public function hotTop()
-    {
-        $hotRepo = make(KeywordsHotRepository::class);
-        $items = $hotRepo->hotTop();
-        return json_success($items);
-    }
-}

+ 0 - 270
runtime/container/proxy/Modules_Api_Controllers_LogController.proxy.php

@@ -1,270 +0,0 @@
-<?php
-
-/**
- * 各种分页记录
- * @author xiabian <xiabian666@gmail.com>
- * @date   2020-02-19 10:13:09
- */
-declare (strict_types=1);
-namespace Modules\Api\Controllers;
-
-use App\Constants\CommentConstant;
-use App\Constants\CommonConstant;
-use App\Constants\OrderConstrant;
-use App\Model\CoinsLogModel;
-use App\Model\InviteRuleModel;
-use App\Model\Mongo\MessageModel;
-use App\Repositories\ChangeLogRepository;
-use App\Repositories\Criterias\ChangeLogCriteria;
-use App\Repositories\Criterias\OrderLimitCriteria;
-use App\Repositories\Criterias\UserCriteria;
-use App\Repositories\UserRebateLevelRepoistory;
-use App\Repositories\UserRepository;
-use App\Repositories\Utils\M3u8CacheRepository;
-use Carbon\Carbon;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use App\Model\CoinsOrderModel;
-use App\Model\VipOrderModel;
-use Modules\Api\Responses\LogChangeListResponse;
-use Psr\SimpleCache\CacheInterface;
-class LogController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 金币购买记录
-     */
-    public function coinsList(ValidatorFactoryInterface $validatorFactory)
-    {
-        // 或 ->getUserId() 拿到到 都是非用户ID,仅用户到邀请码:user_code, 安全设计为此!
-        $user_id = $this->getUserId();
-        // 拿到客户端上传的json内容 {"data":{"page":1,"page_size":2,"moreparam":"vaule"}}
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $pageSize = $inputData['page_size'] ?? CommentConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommentConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommentConstant::PAGE_SIZE;
-        }
-        $result = CoinsOrderModel::query()->where(['user_code' => $user_id])->orderByDesc('id')->paginate($pageSize, ['*'], 'page', $page);
-        return json_success($result);
-    }
-    /**
-     * 金币明细
-     */
-    public function coinsMore(ValidatorFactoryInterface $validatorFactory)
-    {
-        $user_id = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $result = CoinsLogModel::query()->where(['user_code' => $user_id])->orderByDesc('id')->paginate($pageSize, ['*'], 'page', $page);
-        return json_success($result);
-    }
-    /**
-     * vip购买记录
-     */
-    public function vipOrderList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $user_id = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $where = ['user_code' => $user_id];
-        $result = VipOrderModel::query()->where($where)->orderByDesc('vip_order.id')->paginate($pageSize, ['*'], 'page', $page);
-        foreach ($result as $r) {
-            $r->pay_type = OrderConstrant::$messages[$r->pay_type];
-        }
-        return json_success($result);
-    }
-    /**
-     * 余额明细(暂缓-第一版暂不提供)
-     */
-    /**
-     * 邀请记录
-     *
-     *   若不传别人的邀请码,则仅查看自己的邀请人记录; - code
-     *   若传了邀请码,则表示查看别人的邀请人记录;    - code
-     *   表user
-     */
-    public function inviteList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int', 'doings_end_time' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $code = isset($inputData['code']) ? $inputData['code'] : '';
-        if ($code) {
-            //若传了则是请求别人的邀请列表
-            $user_code = $code;
-        } else {
-            //反之仅查自己的邀请列表
-            $user_code = $this->getUserId();
-        }
-        $user_info = make(UserRepository::class)->getUserInfoFromCache($user_code);
-        if (!$user_info) {
-            return json_fail('用户不存在');
-        }
-        $inputData['parent_uid'] = $user_info['code'];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $select = ['nick', 'created_at'];
-        $result = make(UserRepository::class)->pushCriteria(new UserCriteria($inputData))->pushCriteria(new OrderLimitCriteria([['id', 'desc']]))->paginate($pageSize, $select, $page);
-        return json_success($result);
-    }
-    /**
-     * 邀请规则
-     */
-    public function inviteRule()
-    {
-        $cache = make(CacheInterface::class);
-        $invite_rule = $cache->remember('invite_rule', 60 * 60, function () {
-            return InviteRuleModel::query()->get(['person', 'day']);
-        });
-        return json_success($invite_rule);
-    }
-    /**
-     * 帐变流水
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|LogChangeListResponse
-     */
-    public function changeList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int', 'currency_type' => 'nullable|in:1,2', 'type' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $inputData['user_uid'] = $this->getUserId();
-        $orders = [['created_at', 'DESC']];
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $field = ['type', 'currency_type', 'way', 'amount', 'before_amount', 'after_amount', 'created_at'];
-        $res = make(ChangeLogRepository::class)->pushCriteria(new ChangeLogCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page);
-        return new LogChangeListResponse($res);
-    }
-    /**
-     * 聊天记录
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function userChatRecord(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['receive_uid' => 'nullable|string', 'chat_type' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $options = ['limit' => 50, 'sort' => ['created_at' => -1]];
-        $where['$or'] = [['from_uid' => $this->getUserId(), 'receive_uid' => $inputData['receive_uid']], ['receive_uid' => $this->getUserId(), 'from_uid' => $inputData['receive_uid']]];
-        if (isset($inputData['chat_type']) && $inputData['chat_type'] == 'user') {
-            $where['receive_type'] = 'user';
-        } else {
-            $where['receive_type'] = 'shops';
-        }
-        $res = make(MessageModel::class)->db()->find($where, $options)->toArray();
-        foreach ($res as $key => $val) {
-            $content = json_decode($val['content'], true);
-            $message = structureHandle($content['message'], $val['struct_type']);
-            $res[$key]['message'] = json_encode($message);
-            if ($inputData['chat_type'] == 'user') {
-                $res[$key]['receive_avatar'] = M3u8CacheRepository::getImageUrl($res[$key]['receive_avatar']);
-                $res[$key]['from_avatar'] = M3u8CacheRepository::getImageUrl($res[$key]['from_avatar']);
-            }
-            $res[$key]['msg_type'] = $val['struct_type'];
-            $res[$key]['created_at'] = mongoIsoDateToCarbonTime($val['created_at'])->toDateTimeString();
-            $res[$key]['updated_at'] = mongoIsoDateToCarbonTime($val['updated_at'])->toDateTimeString();
-            unset($res[$key]['_id'], $res[$key]['subject'], $res[$key]['receive_type'], $res[$key]['from_type'], $res[$key]['struct_type'], $res[$key]['content']);
-        }
-        // 阅读时间修改
-        make(MessageModel::class)->db()->updateMany(['from_uid' => $inputData['receive_uid'], 'receive_uid' => $this->getUserId(), 'receive_type' => $where['receive_type']], ['$set' => ['read_at' => toMongoIsoDate(Carbon::parse(date('Y-m-d H:i:s')))]]);
-        return json_success(array_reverse($res));
-    }
-    /**
-     * 推广记录
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function promoteList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $pageSize = $inputData['page_size'] ?? CommentConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommentConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $pageSize = intval($pageSize);
-        $res = make(UserRebateLevelRepoistory::class)->promoteLog($this->getUserId(), $page, $pageSize);
-        return json_success($res);
-    }
-}

+ 0 - 194
runtime/container/proxy/Modules_Api_Controllers_M3u8Controller.proxy.php

@@ -1,194 +0,0 @@
-<?php
-
-namespace Modules\Api\Controllers;
-
-use App\Constants\CommonConstant;
-use App\Constants\VideoConstant;
-use App\Model\UserModel;
-use App\Repositories\AdRepository;
-use App\Repositories\OriginalRepository;
-use App\Repositories\Service\CommonService;
-use App\Repositories\ShopsRepository;
-use App\Repositories\UserRepository;
-use App\Repositories\Utils\JwtRepository;
-use App\Repositories\Utils\M3u8CacheRepository;
-use App\Repositories\VideoRepository;
-use Carbon\Carbon;
-use Hyperf\HttpServer\Request;
-use Modules\Api\Services\AuthService;
-use Psr\SimpleCache\CacheInterface;
-class M3u8Controller extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 获取raw
-     * @param Request $request
-     * @param VideoRepository $videoRepository
-     * @param AdRepository $adRepository
-     * @return \Psr\Http\Message\ResponseInterface
-     */
-    public function raw(Request $request, VideoRepository $videoRepository, AdRepository $adRepository, OriginalRepository $goodsRepository, ShopsRepository $shopsRepository)
-    {
-        $zuhe = urldecode($request->input('tk', ''));
-        $module = trim(strtolower($request->input('module', '')));
-        $pk = substr($request->input('pk', ''), 0, 16);
-        $inputSign = $request->input('sn', '');
-        $timestamp = intval($request->input('tm', 0));
-        $rateType = substr($request->input('rate_type', ''), 0, 32);
-        // 指定的比特率.
-        $authService = new AuthService();
-        if (empty($zuhe)) {
-            return self::responseM3u8Raw('参数错误1', true);
-        }
-        if (!in_array($module, ['video', 'ad', 'goods', 'shop'])) {
-            // 判断模块合法性.
-            return self::responseM3u8Raw('参数错误2', true);
-        }
-        $nowDateObj = Carbon::now();
-        $startCheckDate = '2022-08-01 04:45:33';
-        $startCheckObj = Carbon::parse($startCheckDate);
-        if ($nowDateObj > $startCheckObj && in_array($module, ['video'])) {
-            // 大于这个日期, 且视频模块, 才检查签名参数.
-            if (!empty($timestamp) && strlen($timestamp) == 10) {
-                $inputDateObj = Carbon::createFromTimestamp($timestamp);
-                if (abs($inputDateObj->diffInHours($nowDateObj)) >= 3) {
-                    return self::responseM3u8Raw('参数错误6', true);
-                }
-            } else {
-                return self::responseM3u8Raw('参数错误7', true);
-            }
-        }
-        $zuhe2 = caesar_decode($zuhe, 'l,n', 3);
-        // 偏移了3
-        $previewFlag = substr($zuhe2, 0, 2);
-        $queryDeviceType = substr($zuhe2, 2, 1);
-        $queryDeviceNo = substr($zuhe2, 7, strlen($zuhe2) - 7);
-        $sign = M3u8CacheRepository::generateSign($zuhe2, $timestamp);
-        if ($sign !== $inputSign) {
-            return self::responseM3u8Raw('参数错误8', true);
-        }
-        $cacheKey = $authService->getUserDeviceCacheKey($queryDeviceNo, $queryDeviceType);
-        $cache = make(CacheInterface::class);
-        $cacheToken = $cache->has($cacheKey) ? $cache->get($cacheKey) : '';
-        if (empty($cacheToken)) {
-            return self::responseM3u8Raw('参数错误4', true);
-        }
-        $jwtRepo = make(JwtRepository::class);
-        $aud = 'app-users';
-        $validateResult = $jwtRepo->validateToken($cacheToken, $aud);
-        if (!$validateResult['is_valid']) {
-            if ($validateResult['is_expired']) {
-                return self::responseM3u8Raw('参数错误2', true);
-            }
-            return self::responseM3u8Raw('参数错误3', true);
-        }
-        // 破解版专门一个m3u8
-        $tokenObj = $validateResult['token_obj'];
-        $hUserCode = $tokenObj->claims()->get('user_id');
-        // $hDeviceNo =  $tokenObj->claims()->get('device_no');
-        $hDeviceType = $tokenObj->claims()->get('device_type');
-        // $hFingerHash =  $tokenObj->claims()->get('finger_hash');
-        $hIp = $tokenObj->claims()->get('ip');
-        $hVersion = $tokenObj->claims()->get('version');
-        if ($hDeviceType == 'A') {
-            if (version_compare($hVersion, '1.1.1', '<') || version_compare($hVersion, '1.99.1', '>')) {
-                $crackedM3u8Url = 'v2|/20220831/pPlRwPcF/1000kb/hls/index.m3u8';
-                $m3u8Params1 = ['url' => $crackedM3u8Url, 'is_preview' => false];
-                $raw = M3u8CacheRepository::getMu38Raw($m3u8Params1, true);
-                return self::responseM3u8Raw($raw);
-            }
-        }
-        // M3u8验证IP.
-        $clientIp = make(CommonService::class)->getIp();
-        if ($hIp !== $clientIp) {
-            //            make(UserRepository::class)->userLogout($hUserCode);
-            logger('api-M3u8Controller-ip', ['token_ip' => $hIp, 'user_ip' => $clientIp]);
-            //            return self::responseM3u8Raw('参数错误9', true);
-        }
-        $cache = make(CacheInterface::class);
-        $rateTypeKey = !empty($rateType) ? $rateType : 'empty';
-        $cacheKey = $module . ':raw:' . $pk . ':' . $rateTypeKey;
-        $cacheSeconds = 7 * 24 * 60 * 60;
-        $arrItem = $cache->get($cacheKey, []);
-        $m3u8PlayUrl = '';
-        $previewTime = VideoConstant::PREVIEW_TIME;
-        $playerType = 1;
-        if (empty($arrItem)) {
-            switch ($module) {
-                case 'video':
-                    $item = $videoRepository->findBy('id', $pk, ['id', 'mu']);
-                    if (!empty($item->mu)) {
-                        $m3u8PlayUrl = $item->mu;
-                    }
-                    break;
-                case 'ad':
-                    $item = $adRepository->findBy('id', $pk, ['id', 'play']);
-                    if (!empty($item->play)) {
-                        $m3u8PlayUrl = $item->play;
-                    }
-                    break;
-                case 'shop':
-                    $item = $shopsRepository->findBy('uid', $pk, ['video_address']);
-                    if (!empty($item->video_address)) {
-                        $m3u8PlayUrl = $item->video_address;
-                    }
-                    break;
-                case 'goods':
-                    $item = $goodsRepository->findBy('uid', $pk, ['video_address']);
-                    if (!empty($item->video_address)) {
-                        $m3u8PlayUrl = $item->video_address;
-                    }
-                    break;
-            }
-            if (empty($item)) {
-                return self::responseM3u8Raw('参数错误5', true);
-            }
-            $arrItem = $item->toArray();
-            $arrItem['m3u8_play_url'] = $m3u8PlayUrl;
-            $cache->set($cacheKey, $arrItem, $cacheSeconds);
-        }
-        $isPreview = true;
-        // 默认预览
-        if ($previewFlag == 'k4') {
-            // 标识 k4=完整,t5=预览
-            $isPreview = false;
-        }
-        $m3u8FieldUrl = $arrItem['m3u8_play_url'];
-        $itemInfo = ['url' => $m3u8FieldUrl, 'is_preview' => $isPreview];
-        $raw = M3u8CacheRepository::getMu38Raw($itemInfo, true);
-        return self::responseM3u8Raw($raw);
-    }
-    /**
-     * @return string[]
-     */
-    private function getHeaders()
-    {
-        return ['Content-Type' => 'application/x-mpegURL'];
-    }
-    /**
-     * 返回raw
-     * @param $raw
-     * @param bool $isError
-     * @return \Psr\Http\Message\ResponseInterface
-     */
-    private function responseM3u8Raw($raw, $isError = false)
-    {
-        if (config('app_debug') && $isError == true && config('app_env') != 'prod') {
-            return json_fail($raw);
-        } else {
-            if ($isError == true) {
-                return response('', 200, self::getHeaders());
-            } else {
-                return response($raw, 200, self::getHeaders());
-            }
-        }
-    }
-}

+ 0 - 352
runtime/container/proxy/Modules_Api_Controllers_MessageController.proxy.php

@@ -1,352 +0,0 @@
-<?php
-
-namespace Modules\Api\Controllers;
-
-use App\Constants\AdConstrant;
-use App\Constants\CommonConstant;
-use App\Model\CommentModel;
-use App\Model\Mongo\MessageModel;
-use App\Model\Mongo\UserRelationModel;
-use App\Model\Mongo\VideoLikeModel;
-use App\Model\UserModel;
-use App\Model\VideoModel;
-use App\Repositories\ConfigRepoistory;
-use App\Repositories\MessageRepository;
-use App\Repositories\Utils\M3u8CacheRepository;
-use Carbon\Carbon;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Api\Services\VideoService;
-class MessageController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    public function index()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $configRepo = make(ConfigRepoistory::class);
-        $videoService = make(VideoService::class);
-        $adList = $videoService->getAdList(AdConstrant::MESSAGE_INDEX);
-        $ad = null;
-        if (!empty($adList[0])) {
-            $link = M3u8CacheRepository::getLinkUrl($adList[0]['link'], ['user_code' => $userCode]);
-            $ad = ['position' => $adList[0]['position'], 'title' => $adList[0]['title'], 'cover' => !empty($adList[0]['cover']) ? M3u8CacheRepository::getImageUrl($adList[0]['cover']) : '', 'link' => $link, 'scheme' => $adList[0]['scheme'], 'type' => $adList[0]['type'], 'play' => !empty($adList[0]['play']) ? M3u8CacheRepository::getM3u8Url($adList[0]['play']) : '', 'resolution' => $adList[0]['resolution'] ?? ''];
-            if (!empty($ad['link'])) {
-                $ad['link'] = M3u8CacheRepository::getLinkUrl($ad['link'], ['user_code' => $userCode]);
-            }
-        }
-        $kefuUrl = $configRepo->get('server_link', 'sys', '');
-        if (strripos($kefuUrl, '?')) {
-            $kefuUrl .= '&user_code=' . $userCode;
-        } else {
-            $kefuUrl .= '?user_code=' . $userCode;
-        }
-        // 系统消息的第一条,包含统计
-        $sysMsg = make(MessageRepository::class)->firstSys($userCode);
-        $arrData = ['ad' => $ad, 'kefu' => ['url' => $kefuUrl, 'description' => '亲,有什么可以帮助您的?'], 'sys' => $sysMsg, 'talk' => null];
-        // 私聊消息
-        $shopsMsg = make(MessageRepository::class)->firstSys($userCode, 'user');
-        $arrData['count_unread'] = $shopsMsg['count_unread'];
-        return json_success($arrData);
-    }
-    /**
-     * 系统消息分页.
-     * @return mixed
-     */
-    public function sysPages()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $previousDate = isset($inputData['previous_date']) ? trim($inputData['previous_date']) : '';
-        if (empty($previousDate)) {
-            $previousDate = Carbon::now()->toDateTimeString();
-        }
-        $limitNum = 20;
-        $result = ['previous_date' => $previousDate, 'data' => null];
-        $items = make(MessageRepository::class)->previousSysPages($userCode, $previousDate, $limitNum, true);
-        if (!empty($items)) {
-            $result['data'] = $items;
-        }
-        return json_success($result);
-    }
-    /**
-     * 标记消息为已读.
-     * @return mixed|void
-     */
-    public function doRead()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $msgId = isset($inputData['msg_id']) ? trim($inputData['msg_id']) : '';
-        if (empty($msgId)) {
-            return json_fail('参数有误1');
-        }
-        if (!preg_match('/^[a-z0-9]{16,32}$/i', $msgId)) {
-            return json_fail('参数有误2');
-        }
-        $result = make(MessageRepository::class)->doRead($msgId, $userCode);
-        if (!$result) {
-            return json_fail('不能正确操作已读');
-        }
-        return json_success(['result' => 'success']);
-    }
-    /**
-     * 删除自己的消息.
-     * @return mixed
-     */
-    public function deleteMyself()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $msgIds = isset($inputData['msg_ids']) ? trim($inputData['msg_ids']) : '';
-        $receiveUid = $userCode;
-        if (empty($msgIds)) {
-            return json_fail('缺少参数1');
-        }
-        $arrMsgIds = [];
-        if (is_string($msgIds)) {
-            if (stripos($msgIds, ',') !== false) {
-                $arrMsgIds = explode(',', $msgIds);
-            } else {
-                $arrMsgIds[] = $msgIds;
-            }
-        } else {
-            $arrMsgIds = $msgIds;
-        }
-        $result = make(MessageRepository::class)->slientDelete($arrMsgIds, $userCode);
-        if (!$result) {
-            return json_fail('删除消息有误.');
-        }
-        return json_success(['result' => 'success']);
-    }
-    /**
-     * 被关注分页列表
-     */
-    public function followedPages()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $rules = ['page' => 'nullable|int', 'page_size' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($page);
-        $pageSize = intval($pageSize);
-        $relationRepo = make(UserRelationModel::class);
-        $filters = ['to_user_id' => $userCode];
-        $amount = $relationRepo->db()->countDocuments($filters);
-        $skip = ($page - 1) * $pageSize;
-        $options = ['skip' => $skip, 'limit' => $pageSize, 'sort' => ['date' => -1]];
-        $temItems = $relationRepo->db()->find($filters, $options)->toArray();
-        $data = [];
-        $result = ['current_page' => $page, 'per_page' => $pageSize, 'total' => $amount, 'data' => []];
-        if (!empty($temItems)) {
-            foreach ($temItems as $item) {
-                $fromUserCode = $item['from_user_id'];
-                $fromUser = UserModel::query()->where('code', $fromUserCode)->first(['id', 'code', 'nick', 'avatar']);
-                if ($fromUser) {
-                    $fromUser = $fromUser->toArray();
-                    $fromUser['avatar'] = M3u8CacheRepository::getImageUrl($fromUser['avatar']);
-                    $fromUser['date'] = Carbon::parse($item['date'])->toDateTimeString();
-                    unset($fromUser['id']);
-                    $data[] = $fromUser;
-                }
-            }
-        }
-        $result['data'] = $data;
-        return json_success($result);
-    }
-    /**
-     * 被点赞视频分页列表
-     */
-    public function likedPages()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $rules = ['page' => 'nullable|int', 'page_size' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($page);
-        $pageSize = intval($pageSize);
-        $relationRepo = make(VideoLikeModel::class);
-        $filters = ['uid' => $userCode];
-        $amount = $relationRepo->db()->countDocuments($filters);
-        $skip = ($page - 1) * $pageSize;
-        $options = ['skip' => $skip, 'limit' => $pageSize, 'sort' => ['date' => -1]];
-        $temItems = $relationRepo->db()->find($filters, $options)->toArray();
-        $data = [];
-        $result = ['current_page' => $page, 'per_page' => $pageSize, 'total' => $amount, 'data' => []];
-        $cacheVideo = [];
-        if (!empty($temItems)) {
-            $videoColumns = ['id', 'uid', 'title', 'cover'];
-            foreach ($temItems as $item) {
-                $fromUserCode = $item['uid'];
-                $videoId = $item['vid'];
-                if (empty($cacheVideo[$videoId])) {
-                    $videoInfo = VideoModel::query()->where(['status' => 1])->find($videoId, $videoColumns);
-                    if (empty($videoInfo)) {
-                        break;
-                    }
-                    $videoInfo = $videoInfo->toArray();
-                    $cacheVideo[$videoId] = $videoInfo;
-                } else {
-                    $videoInfo = $cacheVideo[$videoId];
-                }
-                $fromUser = UserModel::query()->where('code', $fromUserCode)->first(['id', 'code', 'nick', 'avatar']);
-                if ($fromUser) {
-                    $fromUser = $fromUser->toArray();
-                    $fromUser['avatar'] = M3u8CacheRepository::getImageUrl($fromUser['avatar']);
-                    $fromUser['date'] = Carbon::parse($item['date'])->toDateTimeString();
-                    $fromUser['video'] = ['id' => $videoInfo['id'], 'title' => $videoInfo['title'], 'cover' => M3u8CacheRepository::getImageUrl($videoInfo['cover']), 'uid' => $videoInfo['uid']];
-                    unset($fromUser['id']);
-                    $data[] = $fromUser;
-                }
-            }
-        }
-        $result['data'] = $data;
-        return json_success($result);
-    }
-    /**
-     * 被评论分页列表
-     */
-    public function commentedPages()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $rules = ['page' => 'nullable|int', 'page_size' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($page);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $columns = ['id', 'user_id', 'module', 'svalue', 'content', 'created_at'];
-        $items = CommentModel::query()->where(['module_user_uid' => $userCode])->orderByDesc('created_at')->paginate($pageSize, $columns, 'page', $page);
-        $result = $items->toArray();
-        $cacheData = ['video' => []];
-        if (!empty($result['data'])) {
-            $videoColumns = ['id', 'uid', 'title', 'cover'];
-            foreach ($result['data'] as $k => &$v) {
-                $fromUserCode = $v['user_id'];
-                $moduleInfo = [];
-                if ($v['module'] == 'video') {
-                    $videoId = $v['svalue'];
-                    if (empty($cacheData['video'][$videoId])) {
-                        $videoInfo = VideoModel::query()->where(['status' => 1])->find($videoId, $videoColumns);
-                        if (!empty($videoInfo)) {
-                            $videoInfo = $videoInfo->toArray();
-                            $cacheData['video'][$videoId] = $videoInfo;
-                        }
-                    } else {
-                        $videoInfo = $cacheData['video'][$videoId];
-                    }
-                    $moduleInfo = [
-                        'module' => $v['module'],
-                        'id' => !empty($videoInfo['id']) ? (string) $videoInfo['id'] : '',
-                        // 强语言,统一转换字符串.
-                        'title' => !empty($videoInfo['title']) ? $videoInfo['title'] : '视频已下架',
-                        'cover' => !empty($videoInfo['cover']) ? M3u8CacheRepository::getImageUrl($videoInfo['cover']) : '',
-                        'uid' => !empty($videoInfo['uid']) ? $videoInfo['uid'] : '',
-                    ];
-                }
-                $fromUser = UserModel::query()->where('code', $fromUserCode)->first(['id', 'code', 'nick', 'avatar']);
-                if ($fromUser) {
-                    $fromUser = $fromUser->toArray();
-                    $fromUser['avatar'] = M3u8CacheRepository::getImageUrl($fromUser['avatar']);
-                    $fromUser['date'] = $v['created_at'];
-                    $fromUser['module_info'] = $moduleInfo;
-                    unset($fromUser['id']);
-                } else {
-                    $fromUser = null;
-                }
-                $result['data'][$k] = $fromUser;
-            }
-        }
-        return json_success($result);
-    }
-    /**
-     * 私聊用户列表
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function privateChatLists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|integer', 'page_size' => 'required|integer'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page'] ?? 1);
-        $result = make(MessageModel::class)->db()->aggregate([['$match' => ['receive_uid' => $this->getUserId(), 'from_type' => 'user']], ['$group' => ["_id" => ['from_uid' => '$from_uid'], 'struct_type' => ['$last' => '$struct_type'], 'from_uid' => ['$last' => '$from_uid'], 'from_nick' => ['$last' => '$from_nick'], 'from_avatar' => ['$last' => '$from_avatar'], 'content' => ['$last' => '$content'], 'created_at' => ['$last' => '$created_at']]], ['$sort' => ["created_at" => -1]], ['$limit' => $pageSize * $page], ['$skip' => ($page - 1) * $pageSize]]);
-        $res = $result->toArray();
-        if (!empty($res)) {
-            foreach ($res as &$val) {
-                $content = json_decode($val['content'], true);
-                $message = structureHandle($content['message'], $val['struct_type']);
-                $val['message'] = json_encode($message);
-                $val['created_at'] = mongoIsoDateToCarbonTime($val['created_at'])->toDateTimeString();
-                $val['from_avatar'] = M3u8CacheRepository::getImageUrl($val['from_avatar']);
-                $val['msg_type'] = $val['struct_type'];
-                unset($val['_id'], $val['content'], $val['struct_type']);
-            }
-        }
-        return json_success($res);
-    }
-    /**
-     * 我的页面红点数量
-     * @return mixed
-     */
-    public function myRed()
-    {
-        $result = [];
-        $userCode = $this->getUserId();
-        // 系统消息的第一条,包含统计
-        $sysMsg = make(MessageRepository::class)->firstSys($userCode);
-        $result['count_sys_unread'] = $sysMsg['count_unread'];
-        // 私聊消息
-        $shopsMsg = make(MessageRepository::class)->firstSys($userCode, 'user');
-        $result['count_p2p_unread'] = $shopsMsg['count_unread'];
-        return json_success($result);
-    }
-}

+ 0 - 64
runtime/container/proxy/Modules_Api_Controllers_MsgController.proxy.php

@@ -1,64 +0,0 @@
-<?php
-
-/**
- * 用户api.
- *
- * @author zhangjunbao <junbaoz1314@gmail.com>
- * @date   2020-01-10 21:12:58
- */
-declare (strict_types=1);
-namespace Modules\Api\Controllers;
-
-use App\Model\Mongo\UserRelationModel;
-use App\Model\UserModel;
-use App\Repositories\UserRepository;
-use App\Repositories\Utils\SmsRepository;
-use App\Repositories\VipRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Api\Services\SmsService;
-use Psr\SimpleCache\CacheInterface;
-class MsgController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 发送短信验证码
-     * @return mixed
-     * @throws \GuzzleHttp\Exception\GuzzleException
-     * @throws \Psr\SimpleCache\InvalidArgumentException
-     */
-    public function sendVerfiy()
-    {
-        //当前用户邀请码
-        $inputData = $this->getJsonData();
-        $rules = ['phone' => 'required|string|max:18'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $phone = $inputData['phone'];
-        $code = random(6, 1);
-        $cache = make(CacheInterface::class);
-        $cache->set('phone:code:' . $phone, $code, 600);
-        if (config('app_env') == 'prod') {
-            $smsRepository = make(SmsRepository::class);
-            $result = $smsRepository->sendVerify($phone, $code);
-        } else {
-            return json_success(['result' => 'success']);
-        }
-        // 不管是否真的发送成功, 还是失败。统一让用户觉得发送成功了.
-        if (isset($result['code']) && $result['code'] == 200) {
-            return json_success($result);
-        } else {
-            return json_fail($result['message'], 500, $result['data']);
-        }
-    }
-}

+ 0 - 90
runtime/container/proxy/Modules_Api_Controllers_OrderController.proxy.php

@@ -1,90 +0,0 @@
-<?php
-
-/**
- * 订单回调处理.
- * @author zhangjunbao <junbaoz1314@gmail.com>
- * @date   2020-01-29 10:13:09
- */
-declare (strict_types=1);
-namespace Modules\Api\Controllers;
-
-use App\Model\VipOrderModel;
-use App\Repositories\Service\PaymentService;
-use App\Repositories\Service\QueueService;
-use Carbon\Carbon;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Psr\SimpleCache\CacheInterface;
-class OrderController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 订单回调处理
-     * @param $type
-     * @param $orderId
-     * @param $gateway
-     */
-    public function notify($type, $orderId)
-    {
-        make(QueueService::class)->addPayNotifyJob(['method' => $this->request->getMethod(), 'order_id' => $orderId, 'order_type' => $type, 'order_gateway' => 1, 'data' => $this->request->all(), 'date' => Carbon::now()->toDateTimeString()]);
-        $orderId = intval($orderId);
-        $result = make(PaymentService::class)->notify($orderId, $type);
-        return $result;
-    }
-    /**
-     * 用户上传-支持成功凭证
-     */
-    public function proof(ValidatorFactoryInterface $validatorFactory)
-    {
-        $user_id = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['order_sn' => 'required|string', 'file_path' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $order_sn = $inputData['order_sn'];
-        $file_path = $inputData['file_path'];
-        $where = ['order_sn' => $order_sn];
-        $select = '*';
-        $r = VipOrderModel::query()->selectRaw($select)->where($where)->first();
-        if (!$r) {
-            return json_fail('购买记录不存在');
-        }
-        if ($r['user_code'] != $user_id) {
-            return json_fail('此记录不是你的,无权操作');
-        }
-        if ($r['payproof_imgs']) {
-            return json_fail('你已上传凭证了,请勿重复操作');
-        }
-        $data = array('payproof_imgs' => $file_path, 'is_user_proof' => 1);
-        $re = VipOrderModel::query()->where($where)->update($data);
-        if (!$re) {
-            return json_fail('上传凭证失败');
-        }
-        return json_success('', '上传成功');
-    }
-    /**
-     * 清除支付列表缓存
-     *
-     * @return string|void
-     * @throws \Psr\SimpleCache\InvalidArgumentException
-     */
-    public function delPayListsCache()
-    {
-        $inputData = request()->all();
-        if ($inputData['key'] != env('PAY_CENTER_KEY')) {
-            return json_fail('nook');
-        }
-        make(CacheInterface::class)->delete('paymentType');
-        return json_success('ok');
-    }
-}

+ 0 - 585
runtime/container/proxy/Modules_Api_Controllers_OriginaController.proxy.php

@@ -1,585 +0,0 @@
-<?php
-
-namespace Modules\Api\Controllers;
-
-use App\Constants\AdConstrant;
-use App\Constants\CommentConstant;
-use App\Constants\CommonConstant;
-use App\Repositories\Criterias\OrderLimitCriteria;
-use App\Repositories\Criterias\OriginalGoodsAssessListCriteria;
-use App\Repositories\Criterias\OriginalGoodsListsCriteria;
-use App\Repositories\Criterias\OriginalOrderCriteria;
-use App\Repositories\GoodsAssessRepository;
-use App\Repositories\MessageRepository;
-use App\Repositories\OriginalClassRepository;
-use App\Repositories\OriginalLikeLogRepository;
-use App\Repositories\OriginalOrderRepository;
-use App\Repositories\OriginalRepository;
-use App\Repositories\ShopsRepository;
-use App\Repositories\UserRepository;
-use App\Repositories\UserShippingAddressRepository;
-use App\Repositories\Utils\M3u8CacheRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Api\Responses\OriginalGoodsAssessListResponse;
-use Modules\Api\Responses\OriginalGoodsListsResponse;
-use Modules\Api\Responses\OriginalUserOrderListsResponse;
-use Modules\Api\Services\VideoService;
-class OriginaController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 商品列表
-     *
-     * @return mixed|OriginalGoodsListsResponse
-     */
-    public function goodsLists()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|integer', 'page_size' => 'required|integer', 'class_uid' => 'nullable|string', 'name' => 'nullable|string', 'shops_uid' => 'nullable|string', 'is_reco' => 'nullable|in:1'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        if (isset($inputData['is_reco']) && $inputData['is_reco'] == 1) {
-            $orders = [['steer_level', 'DESC']];
-        } else {
-            $orders = [['sort', 'DESC']];
-        }
-        $pageSize = $inputData['page_size'] ?? CommentConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommentConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $inputData['status'] = 2;
-        $field = ['cover', 'coins', 'original_cions', 'member_coins', 'title', 'number_orders', 'shops_uid', 'uid', 'stock'];
-        $originalRepository = make(OriginalRepository::class);
-        $res = $originalRepository->pushCriteria(new OriginalGoodsListsCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page);
-        $adList = make(VideoService::class)->getAdList(AdConstrant::SMELL_HOME);
-        $ad = [];
-        if (!empty($adList[0])) {
-            foreach ($adList as $k => $adVal) {
-                $link = M3u8CacheRepository::getLinkUrl($adVal['link'], ['user_code' => $userCode]);
-                $ad[$k]['cover'] = M3u8CacheRepository::getImageUrl($adVal['cover']);
-                $ad[$k]['link'] = $link;
-                $ad[$k]['scheme'] = $adVal['scheme'];
-            }
-        }
-        return new OriginalGoodsListsResponse($res, $ad);
-    }
-    /**
-     * 商品详情接口
-     *
-     * @return mixed
-     */
-    public function goodsInfo()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'required|string'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $originalRepo = make(OriginalRepository::class);
-        $info = $originalRepo->findWhereBy(['uid' => $inputData['uid'], 'status' => 2]);
-        if (empty($info)) {
-            return json_fail('该商品不存在');
-        }
-        $res = [];
-        if (!empty($info->photo_address)) {
-            $photoAddress = json_decode($info->photo_address, true);
-            foreach ($photoAddress as $photoVal) {
-                $res['photo_address'][] = M3u8CacheRepository::getImageUrl($photoVal);
-            }
-        }
-        $res['category_name'] = $info->originalCategory->name;
-        // 分类名字
-        $res['title'] = $info->title;
-        // 商品名字
-        $res['coins'] = $info->coins;
-        // 售价
-        $res['content'] = $info->introduce;
-        // 商品介绍
-        $res['likes'] = $info->likes;
-        // 点赞数
-        $res['number_orders'] = $info->number_orders + 1;
-        // 想要
-        $res['browse'] = $info->browse;
-        // 浏览数
-        $res['cover'] = M3u8CacheRepository::getImageUrl($info->cover);
-        // 商品封面
-        $res['cover_tow'] = $info->cover;
-        // 商品封面
-        $res['member_coins'] = $info->member_coins;
-        $res['stock'] = $info->stock;
-        // 库存
-        $res['uid'] = $info->uid;
-        $res['video_address'] = M3u8CacheRepository::getVideoInnerUrl($info->video_address, $this->getUserId(), $info->uid, 'goods');
-        $res['is_goods'] = make(OriginalLikeLogRepository::class)->judgeIsLike($this->getUserId(), $inputData['uid']);
-        //是否点赞
-        // 店铺信息
-        $res['shop']['cover'] = M3u8CacheRepository::getImageUrl($info->shops->cover);
-        $res['shop']['name'] = $info->shops->title;
-        $res['shop']['province'] = $info->shops->province;
-        $res['shop']['city'] = $info->shops->city;
-        $res['shop']['region'] = $info->shops->region;
-        $res['shop']['credit_value'] = $info->shops->credit_value;
-        $res['shop']['uid'] = $info->shops->uid;
-        $res['shop']['video_address'] = M3u8CacheRepository::getVideoInnerUrl($info->shops->video_address, $this->getUserId(), $info->shops->uid, 'shop');
-        $res['shop']['settled_date'] = diffDate((string) $info->shops->created_at, date('Y-m-d H:i:s'));
-        // 想要加1
-        $originalRepo->numberOrdersAdd($inputData['uid']);
-        return json_success($res);
-    }
-    public function goodsAssessList()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|integer', 'page_size' => 'required|integer', 'uid' => 'required|string'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['created_at', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommentConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommentConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $goodsAssessRepo = make(GoodsAssessRepository::class);
-        $field = ['comment', 'buy_uid', 'comment_fraction'];
-        $res = $goodsAssessRepo->pushCriteria(new OriginalGoodsAssessListCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page);
-        return new OriginalGoodsAssessListResponse($res);
-    }
-    /**
-     * 分类列表
-     *
-     * @return mixed
-     */
-    public function category()
-    {
-        $res = make(OriginalClassRepository::class)->list(['status' => 1, 'type' => 1], ['uid', 'name'], ['sort', 'desc']);
-        return json_success($res);
-    }
-    /**
-     * 点赞
-     *
-     * @return mixed
-     */
-    public function goodsLike()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['goods_uid' => 'required|string'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $count = make(OriginalLikeLogRepository::class)->judgeIsLike($this->getUserId(), $inputData['goods_uid']);
-        if ($count) {
-            return json_fail('请勿重复点赞');
-        }
-        $goodsInfo = make(OriginalRepository::class)->findBy('uid', $inputData['goods_uid'], ['id']);
-        if (!$goodsInfo) {
-            return json_fail('商品点赞异常');
-        }
-        $userInfo = make(UserRepository::class)->getUserInfoData($this->getUserId());
-        if (!$userInfo) {
-            return json_fail('用户账号异常');
-        }
-        $res = make(OriginalLikeLogRepository::class)->create(['user_uid' => $this->getUserId(), 'goods_uid' => $inputData['goods_uid']]);
-        if ($res) {
-            make(OriginalRepository::class)->addLike($inputData['goods_uid']);
-            return json_success([], '点赞成功');
-        } else {
-            return json_fail('点赞失败');
-        }
-    }
-    /**
-     * 添加收货地址
-     *
-     * @return mixed
-     */
-    public function addShippingAddress()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['name' => 'required|string|between:2,16', 'phone' => 'required|integer|regex:/^1[3456789]\\d{9}$/', 'province' => 'required|integer', 'city' => 'required|integer', 'region' => 'nullable|integer', 'address' => 'required|string|between:4,36', 'default_address' => 'required|in:1,2'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $addressRepo = make(UserShippingAddressRepository::class);
-        $addressCount = $addressRepo->getAddressCount($this->getUserId());
-        if ($addressCount > 5) {
-            return json_fail('最多只可添加6个收货地址,请删除后再添加新的收货地址');
-        }
-        if ($inputData['default_address'] == 1) {
-            make(UserShippingAddressRepository::class)->update(['is_default' => 2], $this->getUserId(), 'user_uid');
-        }
-        $insterData = ['user_uid' => $this->getUserId(), 'name' => $inputData['name'], 'phone' => $inputData['phone'], 'address' => $inputData['address'], 'is_default' => $inputData['default_address'], 'province' => $inputData['province'], 'city' => $inputData['city'], 'region' => $inputData['region']];
-        $res = make(UserShippingAddressRepository::class)->create($insterData);
-        if ($res) {
-            return json_success([], '添加成功');
-        } else {
-            return json_fail('添加收货地址失败');
-        }
-    }
-    /**
-     * 收货地址列表
-     *
-     * @return mixed
-     */
-    public function addressLists()
-    {
-        $res = make(UserShippingAddressRepository::class)->findAllBy('user_uid', $this->getUserId(), ['name', 'phone', 'address', 'is_default', 'province', 'city', 'region', 'uid']);
-        return json_success($res);
-    }
-    /**
-     * 收货地址详情
-     *
-     * @return mixed
-     */
-    public function addressInfo()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'required|string'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $info = make(UserShippingAddressRepository::class)->findWhereBy(['user_uid' => $this->getUserId(), 'uid' => $inputData['uid']], ['name', 'phone', 'address', 'is_default', 'province', 'city', 'region']);
-        if (empty($info)) {
-            return json_fail('收货地址不存在');
-        }
-        return json_success($info);
-    }
-    /**
-     * 修改收货地址
-     *
-     * @return mixed
-     */
-    public function upAddress()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'required|string', 'name' => 'nullable|string|between:2,16', 'phone' => 'nullable|integer|regex:/^1[34578]\\d{9}$/', 'province' => 'nullable|integer', 'city' => 'nullable|integer', 'region' => 'nullable|integer', 'address' => 'nullable|string|between:4,36', 'default_address' => 'nullable|in:1,2'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $addressRepo = make(UserShippingAddressRepository::class);
-        $info = $addressRepo->findWhereBy(['uid' => $inputData['uid'], 'user_uid' => $this->getUserId()]);
-        if (empty($info)) {
-            return json_fail('修改异常,请联系客服');
-        }
-        $res = $addressRepo->updateAddress($inputData, $this->getUserId());
-        if ($res) {
-            return json_success([], '修改成功');
-        } else {
-            return json_fail('修改失败');
-        }
-    }
-    /**
-     * 删除收货地址
-     *
-     * @return mixed
-     */
-    public function delAddress()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'required|string'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $addressRepo = make(UserShippingAddressRepository::class);
-        $info = $addressRepo->findWhereBy(['uid' => $inputData['uid'], 'user_uid' => $this->getUserId()], ['id']);
-        if (empty($info)) {
-            return json_fail('异常操作,收货地址不存在');
-        }
-        $res = make(UserShippingAddressRepository::class)->delete($info->id);
-        if ($res) {
-            return json_success([], '删除成功');
-        } else {
-            return json_fail('删除失败');
-        }
-    }
-    /**
-     * 购买商品详情接口
-     *
-     * @return mixed
-     */
-    public function goodsBuyInfo()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'required|string'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $goodsInfo = make(OriginalRepository::class)->findWhereBy(['uid' => $inputData['uid'], 'status' => 2], ['title', 'shops_uid', 'cover', 'coins', 'original_cions', 'member_coins']);
-        if (empty($goodsInfo)) {
-            return json_fail('商品已下架,请重新选择新商品');
-        }
-        // 获取默认收货地址
-        $res['address'] = make(UserShippingAddressRepository::class)->getUserAddress($this->getUserId());
-        $res['title'] = $goodsInfo->title;
-        $res['coins'] = $goodsInfo->coins;
-        $res['original_cions'] = $goodsInfo->original_cions;
-        $res['member_coins'] = $goodsInfo->member_coins;
-        $res['shop_name'] = $goodsInfo->shops->title;
-        $res['cover'] = M3u8CacheRepository::getImageUrl($goodsInfo->title);
-        return json_success($res);
-    }
-    /**
-     * 购买商品
-     *
-     * @return mixed
-     */
-    public function goodsBuy()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'required|string', 'address_uid' => 'required|string', 'number' => 'required|integer', 'price' => 'required|integer', 'message' => 'nullable|string|between:2,16'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orderRepo = make(OriginalOrderRepository::class);
-        // 生成订单
-        $orderSn = $orderRepo->createOrder($inputData, $this->getUserId());
-        if ($orderSn === false) {
-            return json_fail('购买失败,请联系客服', 30002);
-        }
-        $userInfo = make(UserRepository::class)->getUserInfoFromCache($this->getUserId());
-        if ($userInfo['coins'] < $inputData['price']) {
-            return json_fail('金币不足,请充值后再购买', 30001);
-        }
-        // 购买付钱
-        $res = $orderRepo->buyGoods($orderSn, $this->getUserId());
-        if ($res) {
-            return json_success([], '购买成功');
-        } else {
-            return json_fail('付款失败', 30003);
-        }
-    }
-    /**
-     * 确认购买订单
-     *
-     * @return mixed
-     */
-    public function verifyBuy()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['order_sn' => 'required|string'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $res = make(OriginalOrderRepository::class)->buyGoods($inputData['order_sn'], $this->getUserId());
-        if ($res) {
-            return json_success([], '购买成功');
-        } else {
-            return json_fail('购买失败', 30004);
-        }
-    }
-    /**
-     * 用户订单列表
-     *
-     * @return mixed|OriginalUserOrderListsResponse
-     */
-    public function userOrderLists()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|integer', 'page_size' => 'required|integer', 'order_status' => 'nullable|integer'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['created_at', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommentConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommentConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $inputData['buy_uid'] = $this->getUserId();
-        $field = ['goods_cover', 'goods_name', 'clinch_amount', 'sell_uid', 'order_status', 'pay_status', 'redund_status', 'order_sn', 'goods_amount'];
-        $res = make(OriginalOrderRepository::class)->pushCriteria(new OriginalOrderCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page);
-        return new OriginalUserOrderListsResponse($res);
-    }
-    /**
-     * 用户订单详情
-     *
-     * @return mixed
-     */
-    public function userOrderInfo()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['order_sn' => 'required|string'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $info = make(OriginalOrderRepository::class)->findWhereBy(['order_sn' => $inputData['order_sn'], 'buy_uid' => $this->getUserId()]);
-        if (empty($info)) {
-            return json_fail('订单异常');
-        }
-        $res = ['name' => $info->goods_name, 'order_sn' => $info->order_sn, 'cover' => M3u8CacheRepository::getImageUrl($info->goods_cover), 'order_status' => $info->order_status, 'clinch_amount' => $info->clinch_amount, 'goods_amount' => $info->goods_amount, 'address' => json_decode($info->address, true), 'order_info' => ['order_sn' => $info->order_sn, 'pay_time' => $info->pay_time, 'message' => $info->message], 'logistics_info' => ['courier_firm' => $info->courier_firm ?: '', 'courier_number' => $info->courier_number ?: '', 'logistics_info' => $info->logistics_info ?: ''], 'pay_time' => $info->pay_time, 'receipt_time' => $info->receipt_time, 'refund_apply_time' => $info->refund_apply_time, 'refund_end_time' => $info->refund_end_time, 'assess_time' => $info->assess_time];
-        $res['assess_info'] = null;
-        if ($info->order_status == 4) {
-            $assessInfo = make(GoodsAssessRepository::class)->findWhereBy(['order_sn' => $info->order_sn, 'buy_uid' => $this->getUserId()]);
-            if (!empty($assessInfo)) {
-                $res['assess_info'] = ['fraction' => $assessInfo->comment_fraction ?: '', 'comment' => $assessInfo->comment ?: ''];
-            }
-        }
-        return json_success($res);
-    }
-    /**
-     * 用户订单删除
-     *
-     * @return mixed
-     * @throws \Exception
-     */
-    public function userOrderDelete()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['order_sn' => 'required|string'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $info = make(OriginalOrderRepository::class)->findWhereBy(['order_sn' => $inputData['order_sn'], 'buy_uid' => $this->getUserId(), 'order_status' => 1]);
-        if (empty($info)) {
-            return json_fail('该订单不可被删除');
-        }
-        $res = $info->delete();
-        if ($res) {
-            return json_success([], '订单删除成功');
-        } else {
-            return json_fail('操作失败');
-        }
-    }
-    /**
-     * 确认收货
-     *
-     * @return mixed
-     */
-    public function confirmReceipt()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['order_sn' => 'required|string', 'fraction' => 'required|integer|in:1,2,3', 'comment' => 'nullable|string|max:255', 'img_json' => 'nullable|string'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $info = make(OriginalOrderRepository::class)->findWhereBy(['order_sn' => $inputData['order_sn'], 'buy_uid' => $this->getUserId()]);
-        if (empty($info)) {
-            return json_fail('确认收货异常,请联系管理员');
-        }
-        $data = ['goods_uid' => $info->goods_uid, 'buy_uid' => $this->getUserId(), 'goods_name' => $info->goods_name, 'order_sn' => $info->order_sn, 'evaluation_map' => $inputData['img_json'], 'comment' => $inputData['comment'], 'comment_fraction' => $inputData['fraction'], 'reward_coins' => 5];
-        $res = make(OriginalOrderRepository::class)->confirmReceipt($data, 5);
-        if ($res) {
-            return json_success([], '操作成功');
-        } else {
-            return json_fail('操作失败');
-        }
-    }
-    /**
-     * 申请退款
-     *
-     * @return mixed
-     */
-    public function applyRefund()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['order_sn' => 'required|string', 'content' => 'required|max:255'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $where = ['redund_status' => 1, 'order_sn' => $inputData['order_sn'], 'buy_uid' => $this->getUserId()];
-        $orderInfo = make(OriginalOrderRepository::class)->findWhereBy($where);
-        if (empty($orderInfo)) {
-            return json_fail('当前订单不可被退款');
-        }
-        $orderInfo->redund_status = 2;
-        $orderInfo->order_status = 5;
-        $orderInfo->apply_reason = $inputData['content'];
-        $orderInfo->refund_apply_time = date('Y-m-d H:i:s');
-        if ($orderInfo->save()) {
-            return json_success([], '申请成功,在三个工作日内将会处理您的订单');
-        } else {
-            return json_fail('申请失败!');
-        }
-    }
-    /**
-     * 店铺详情
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @throws \Exception
-     */
-    public function shopsInfo(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['shops_uid' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $shopInfo = make(ShopsRepository::class)->findBy('uid', $inputData['shops_uid'], ['cover', 'title', 'credit_value', 'video_address', 'created_at']);
-        if (empty($shopInfo)) {
-            return json_fail('该店铺不存在');
-        }
-        $res = ['cover' => M3u8CacheRepository::getImageUrl($shopInfo->cover), 'name' => $shopInfo->title, 'credit_value' => $shopInfo->credit_value, 'video_address' => M3u8CacheRepository::getVideoInnerUrl($shopInfo->video_address, $this->getUserId(), $inputData['shops_uid'], 'shop'), 'created_at' => diffDate((string) $shopInfo->created_at, date('Y-m-d H:i:s'))];
-        return json_success($res);
-    }
-    public function msgCount()
-    {
-        $msgInfo = make(MessageRepository::class)->firstSys($this->getUserId(), 'shops');
-        $msgInfo['shops_info'] = null;
-        if ($msgInfo['count_unread'] > 0 && isset($msgInfo['first_msg']['from_uid'])) {
-            $shopsInfo = make(ShopsRepository::class)->findBy('uid', $msgInfo['first_msg']['from_uid'], ['title', 'cover', 'uid']);
-            if ($shopsInfo) {
-                $msgInfo['shops_info']['title'] = $shopsInfo->title;
-                $msgInfo['shops_info']['cover'] = M3u8CacheRepository::getImageUrl($shopsInfo->cover);
-                $msgInfo['shops_info']['uid'] = $shopsInfo['uid'];
-            }
-        }
-        unset($msgInfo['first_msg']);
-        return json_success($msgInfo);
-    }
-}

+ 0 - 459
runtime/container/proxy/Modules_Api_Controllers_PerfectController.proxy.php

@@ -1,459 +0,0 @@
-<?php
-
-namespace Modules\Api\Controllers;
-
-use App\Constants\AdConstrant;
-use App\Constants\CategoryConstant;
-use App\Constants\CommonConstant;
-use App\Model\CommentModel;
-use App\Model\Mongo\MessageModel;
-use App\Model\Mongo\UserRelationModel;
-use App\Model\Mongo\VideoLikeModel;
-use App\Model\UserModel;
-use App\Model\VideoModel;
-use App\Repositories\CategoryRepository;
-use App\Repositories\CommentRepository;
-use App\Repositories\ConfigRepoistory;
-use App\Repositories\CreatorRepository;
-use App\Repositories\MessageRepository;
-use App\Repositories\RelationRepository;
-use App\Repositories\Utils\M3u8CacheRepository;
-use App\Repositories\VideoRepository;
-use Carbon\Carbon;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Api\Services\VideoService;
-class PerfectController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    public function home()
-    {
-        $userCode = $this->getUserId();
-        $videoService = make(VideoService::class);
-        $adList1 = $videoService->getAdList(AdConstrant::PERFECT_HOME1);
-        $ads1 = null;
-        if (!empty($adList1)) {
-            $ads1 = [];
-            foreach ($adList1 as $v) {
-                $linkUrl = $v['link'];
-                if (!empty($linkUrl)) {
-                    $linkUrl = M3u8CacheRepository::getLinkUrl($linkUrl, ['user_code' => $userCode]);
-                }
-                $ads1[] = ['title' => $v['title'], 'cover' => !empty($v['cover']) ? M3u8CacheRepository::getImageUrl($v['cover']) : '', 'link' => $linkUrl, 'scheme' => $v['scheme']];
-            }
-        }
-        $creatorRepo = make(CreatorRepository::class);
-        $topCreators = $creatorRepo->getTopUsersByIncome();
-        $result = ['top_creators' => $topCreators, 'ads1' => $ads1, 'top10' => [], 'cates' => []];
-        $categoryRepo = make(CategoryRepository::class);
-        $top10Position = CategoryConstant::POSITION_JINGPING_TOP;
-        $topCates = $categoryRepo->findAllByPosition($top10Position);
-        if (!empty($topCates['0']['alias_name'])) {
-            $top10Alias = $topCates['0']['alias_name'];
-            $top10Num = $topCates['0']['show_num'] ?? 10;
-            $top10Videos = $categoryRepo->getVideos($top10Alias, $top10Num);
-            if (!empty($top10Videos)) {
-                foreach ($top10Videos as &$v) {
-                    $v['mu'] = '';
-                    // 列表干掉m3u8地址.
-                    //                    $v['mu'] = !empty($v['mu']) ? M3u8CacheRepository::getVideoInnerUrl($v['mu'], $userCode, $v['id'], 'video') : '';
-                }
-            }
-            $result['top10'] = $top10Videos;
-        }
-        $channelPosition = CategoryConstant::POSTION_JINGPING_CHANNEL;
-        $channelCates = $categoryRepo->findAllByPosition($channelPosition);
-        if (!empty($channelCates)) {
-            foreach ($channelCates as $item) {
-                $channelAliasName = $item['alias_name'];
-                $showNum = $item['show_num'] ?? 10;
-                $channelName = $item['name'];
-                $videoItems = $categoryRepo->getVideos($channelAliasName, $showNum);
-                if (!empty($videoItems)) {
-                    foreach ($videoItems as &$v) {
-                        $v['mu'] = '';
-                        // 列表干掉m3u8地址.
-                        //                        $v['mu'] = !empty($v['mu']) ? M3u8CacheRepository::getVideoInnerUrl($v['mu'], $userCode, $v['id'], 'video') : '';
-                    }
-                }
-                $result['cates'][] = ['name' => $channelName, 'alias_name' => $channelAliasName, 'items' => $videoItems];
-            }
-        }
-        return json_success($result);
-    }
-    public function homeCases()
-    {
-        $userCode = $this->getUserId();
-        $videoService = make(VideoService::class);
-        $adList1 = $videoService->getAdList(AdConstrant::PERFECT_HOME1);
-        $ads1 = null;
-        if (!empty($adList1)) {
-            $ads1 = [];
-            foreach ($adList1 as $v) {
-                $linkUrl = $v['link'];
-                if (!empty($linkUrl)) {
-                    $linkUrl = M3u8CacheRepository::getLinkUrl($linkUrl, ['user_code' => $userCode]);
-                }
-                $ads1[] = ['title' => $v['title'], 'cover' => !empty($v['cover']) ? M3u8CacheRepository::getImageUrl($v['cover']) : '', 'link' => $linkUrl, 'scheme' => $v['scheme']];
-            }
-        }
-        $result = ['ads1' => $ads1, 'cates' => []];
-        $categoryRepo = make(CategoryRepository::class);
-        $channelPosition = CategoryConstant::POSTION_JINGXIAN;
-        $channelCates = $categoryRepo->findAllByPosition($channelPosition);
-        if (!empty($channelCates)) {
-            foreach ($channelCates as $item) {
-                $channelAliasName = $item['alias_name'];
-                $channelName = $item['name'];
-                $result['cates'][] = ['name' => $channelName, 'alias_name' => $channelAliasName];
-            }
-        }
-        return json_success($result);
-    }
-    /**
-     * 系统消息分页.
-     * @return mixed
-     */
-    public function sysPages()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $previousDate = isset($inputData['previous_date']) ? trim($inputData['previous_date']) : '';
-        if (empty($previousDate)) {
-            $previousDate = Carbon::now()->toDateTimeString();
-        }
-        $limitNum = 20;
-        $result = ['previous_date' => $previousDate, 'data' => null];
-        $items = make(MessageRepository::class)->previousSysPages($userCode, $previousDate, $limitNum, true);
-        if (!empty($items)) {
-            $result['data'] = $items;
-        }
-        return json_success($result);
-    }
-    /**
-     * 标记消息为已读.
-     * @return mixed|void
-     */
-    public function doRead()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $msgId = isset($inputData['msg_id']) ? trim($inputData['msg_id']) : '';
-        if (empty($msgId)) {
-            return json_fail('参数有误1');
-        }
-        if (!preg_match('/^[a-z0-9]{16,32}$/i', $msgId)) {
-            return json_fail('参数有误2');
-        }
-        $result = make(MessageRepository::class)->doRead($msgId, $userCode);
-        if (!$result) {
-            return json_fail('不能正确操作已读');
-        }
-        return json_success(['result' => 'success']);
-    }
-    /**
-     * 删除自己的消息.
-     * @return mixed
-     */
-    public function deleteMyself()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $msgIds = isset($inputData['msg_ids']) ? trim($inputData['msg_ids']) : '';
-        $receiveUid = $userCode;
-        if (empty($msgIds)) {
-            return json_fail('缺少参数1');
-        }
-        $arrMsgIds = [];
-        if (is_string($msgIds)) {
-            if (stripos($msgIds, ',') !== false) {
-                $arrMsgIds = explode(',', $msgIds);
-            } else {
-                $arrMsgIds[] = $msgIds;
-            }
-        } else {
-            $arrMsgIds = $msgIds;
-        }
-        $result = make(MessageRepository::class)->slientDelete($arrMsgIds, $userCode);
-        if (!$result) {
-            return json_fail('删除消息有误.');
-        }
-        return json_success(['result' => 'success']);
-    }
-    /**
-     * 被关注分页列表
-     */
-    public function followedPages()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $rules = ['page' => 'nullable|int', 'page_size' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($page);
-        $pageSize = intval($pageSize);
-        $relationRepo = make(UserRelationModel::class);
-        $filters = ['to_user_id' => $userCode];
-        $amount = $relationRepo->db()->countDocuments($filters);
-        $skip = ($page - 1) * $pageSize;
-        $options = ['skip' => $skip, 'limit' => $pageSize, 'sort' => ['date' => -1]];
-        $temItems = $relationRepo->db()->find($filters, $options)->toArray();
-        $data = [];
-        $result = ['current_page' => $page, 'per_page' => $pageSize, 'total' => $amount, 'data' => []];
-        if (!empty($temItems)) {
-            foreach ($temItems as $item) {
-                $fromUserCode = $item['from_user_id'];
-                $fromUser = UserModel::query()->where('code', $fromUserCode)->first(['id', 'code', 'nick', 'avatar']);
-                if ($fromUser) {
-                    $fromUser = $fromUser->toArray();
-                    $fromUser['avatar'] = M3u8CacheRepository::getImageUrl($fromUser['avatar']);
-                    $fromUser['date'] = Carbon::parse($item['date'])->toDateTimeString();
-                    unset($fromUser['id']);
-                    $data[] = $fromUser;
-                }
-            }
-        }
-        $result['data'] = $data;
-        return json_success($result);
-    }
-    /**
-     * 被点赞视频分页列表
-     */
-    public function likedPages()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $rules = ['page' => 'nullable|int', 'page_size' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($page);
-        $pageSize = intval($pageSize);
-        $relationRepo = make(VideoLikeModel::class);
-        $filters = ['uid' => $userCode];
-        $amount = $relationRepo->db()->countDocuments($filters);
-        $skip = ($page - 1) * $pageSize;
-        $options = ['skip' => $skip, 'limit' => $pageSize, 'sort' => ['date' => -1]];
-        $temItems = $relationRepo->db()->find($filters, $options)->toArray();
-        $data = [];
-        $result = ['current_page' => $page, 'per_page' => $pageSize, 'total' => $amount, 'data' => []];
-        $cacheVideo = [];
-        if (!empty($temItems)) {
-            $videoColumns = ['id', 'uid', 'title', 'cover'];
-            foreach ($temItems as $item) {
-                $fromUserCode = $item['uid'];
-                $videoId = $item['vid'];
-                if (empty($cacheVideo[$videoId])) {
-                    $videoInfo = VideoModel::query()->where(['status' => 1])->find($videoId, $videoColumns);
-                    if (empty($videoInfo)) {
-                        break;
-                    }
-                    $videoInfo = $videoInfo->toArray();
-                    $cacheVideo[$videoId] = $videoInfo;
-                } else {
-                    $videoInfo = $cacheVideo[$videoId];
-                }
-                $fromUser = UserModel::query()->where('code', $fromUserCode)->first(['id', 'code', 'nick', 'avatar']);
-                if ($fromUser) {
-                    $fromUser = $fromUser->toArray();
-                    $fromUser['avatar'] = M3u8CacheRepository::getImageUrl($fromUser['avatar']);
-                    $fromUser['date'] = Carbon::parse($item['date'])->toDateTimeString();
-                    $fromUser['video'] = ['id' => $videoInfo['id'], 'title' => $videoInfo['title'], 'cover' => M3u8CacheRepository::getImageUrl($videoInfo['cover']), 'uid' => $videoInfo['uid']];
-                    unset($fromUser['id']);
-                    $data[] = $fromUser;
-                }
-            }
-        }
-        $result['data'] = $data;
-        return json_success($result);
-    }
-    /**
-     * 被评论分页列表
-     */
-    public function commentedPages()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $rules = ['page' => 'nullable|int', 'page_size' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($page);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $columns = ['id', 'user_id', 'module', 'svalue', 'content', 'created_at'];
-        $items = CommentModel::query()->where(['module_user_uid' => $userCode])->orderByDesc('created_at')->paginate($pageSize, $columns, 'page', $page);
-        $result = $items->toArray();
-        $cacheData = ['video' => []];
-        if (!empty($result['data'])) {
-            $videoColumns = ['id', 'uid', 'title', 'cover'];
-            foreach ($result['data'] as $k => &$v) {
-                $fromUserCode = $v['user_id'];
-                $moduleInfo = [];
-                if ($v['module'] == 'video') {
-                    $videoId = $v['svalue'];
-                    if (empty($cacheData['video'][$videoId])) {
-                        $videoInfo = VideoModel::query()->where(['status' => 1])->find($videoId, $videoColumns);
-                        if (!empty($videoInfo)) {
-                            $videoInfo = $videoInfo->toArray();
-                            $cacheData['video'][$videoId] = $videoInfo;
-                        }
-                    } else {
-                        $videoInfo = $cacheData['video'][$videoId];
-                    }
-                    $moduleInfo = [
-                        'module' => $v['module'],
-                        'id' => !empty($videoInfo['id']) ? (string) $videoInfo['id'] : '',
-                        // 强语言,统一转换字符串.
-                        'title' => !empty($videoInfo['title']) ? $videoInfo['title'] : '视频已下架',
-                        'cover' => !empty($videoInfo['cover']) ? M3u8CacheRepository::getImageUrl($videoInfo['cover']) : '',
-                        'uid' => !empty($videoInfo['uid']) ? $videoInfo['uid'] : '',
-                    ];
-                }
-                $fromUser = UserModel::query()->where('code', $fromUserCode)->first(['id', 'code', 'nick', 'avatar']);
-                if ($fromUser) {
-                    $fromUser = $fromUser->toArray();
-                    $fromUser['avatar'] = M3u8CacheRepository::getImageUrl($fromUser['avatar']);
-                    $fromUser['date'] = $v['created_at'];
-                    $fromUser['module_info'] = $moduleInfo;
-                    unset($fromUser['id']);
-                } else {
-                    $fromUser = null;
-                }
-                $result['data'][$k] = $fromUser;
-            }
-        }
-        return json_success($result);
-    }
-    /**
-     * 私聊用户列表
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function privateChatLists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|integer', 'page_size' => 'required|integer'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page'] ?? 1);
-        $result = make(MessageModel::class)->db()->aggregate([['$match' => ['receive_uid' => $this->getUserId(), 'from_type' => 'user']], ['$group' => ["_id" => ['from_uid' => '$from_uid'], 'struct_type' => ['$first' => '$struct_type'], 'from_uid' => ['$first' => '$from_uid'], 'from_nick' => ['$first' => '$from_nick'], 'from_avatar' => ['$first' => '$from_avatar'], 'content' => ['$first' => '$content'], 'created_at' => ['$first' => '$created_at']]], ['$sort' => ["created_at" => -1]], ['$limit' => $pageSize * $page], ['$skip' => ($page - 1) * $pageSize]]);
-        $res = $result->toArray();
-        if (!empty($res)) {
-            foreach ($res as &$val) {
-                $val['created_at'] = mongoIsoDateToCarbonTime($val['created_at'])->toDateTimeString();
-                $val['from_avatar'] = M3u8CacheRepository::getImageUrl($val['from_avatar']);
-                unset($val['_id']);
-            }
-        }
-        return json_success($res);
-    }
-    /**
-     * 分类别名下的视频分页(有缓存)
-     * @return mixed
-     * @throws \Psr\SimpleCache\InvalidArgumentException
-     */
-    public function videoPagesByCategoryName()
-    {
-        $userCode = $this->getUserId();
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|int', 'page_size' => 'nullable|int', 'cate_alias_name' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($page);
-        $pageSize = intval($pageSize);
-        $videoRepo = make(VideoRepository::class);
-        $cateAliasName = data_get($inputData, 'cate_alias_name', '');
-        $arrData = [];
-        $lists = $videoRepo->pagesByCategoryAlias($cateAliasName, $page, $pageSize);
-        if (!empty($lists['data'])) {
-            $relationRepo = make(RelationRepository::class);
-            $videoService = make(VideoService::class);
-            $arrAds = $videoService->getAdList(AdConstrant::VIDEO_HOME);
-            $adStep = 1;
-            $configRepo = make(ConfigRepoistory::class);
-            $stepDelimiter = intval($configRepo->get('ad_delimiter_num', 'sys', 10));
-            // 间隔视频几个出现视频.
-            foreach ($lists['data'] as $k => $v) {
-                $v['mu'] = '';
-                // 列表干掉m3u8地址.
-                //                $v['mu'] = M3u8CacheRepository::getVideoInnerUrl($v['mu'], $userCode, $v['id'], 'video');
-                $v['cover'] = M3u8CacheRepository::getImageUrl($v['cover']);
-                if (!empty($v['user'])) {
-                    $v['user']['avatar'] = !empty($v['user']['avatar']) ? M3u8CacheRepository::getImageUrl($v['user']['avatar']) : '';
-                }
-                //                if (!empty($v['user'])) {
-                //                    $v['user']['is_focus'] = $relationRepo->userIsFocusOtherUser($userCode, $v['user']['code']);
-                //                }
-                //                $v['is_my_like'] = $relationRepo->userIsLikeVideo($userCode, $v['id']);
-                $arrData[] = ['type' => 'v', 'video' => $v];
-                if ($k != 0 && $adStep % $stepDelimiter == 0 && !empty($arrAds)) {
-                    $tmpArrPlay = $videoRepo->getRandAdFromAds($arrAds);
-                    $tmpArrPlay['cover'] = !empty($tmpArrPlay['cover']) ? M3u8CacheRepository::getImageUrl($tmpArrPlay['cover']) : '';
-                    if (!empty($tmpArrPlay['link'])) {
-                        $tmpArrPlay['link'] = M3u8CacheRepository::getLinkUrl($tmpArrPlay['link'], ['user_code' => $userCode]);
-                    }
-                    if (!empty($tmpArrPlay['play'])) {
-                        $tmpArrPlay['play'] = M3u8CacheRepository::getVideoInnerUrl($tmpArrPlay['play'], $userCode, $tmpArrPlay['id'], 'ad');
-                    }
-                    unset($tmpArrPlay['id']);
-                    $arrData[] = ['type' => 'a', 'video' => $tmpArrPlay];
-                }
-                $adStep++;
-            }
-            $lists['data'] = $arrData;
-        }
-        return json_success($lists);
-    }
-}

+ 0 - 334
runtime/container/proxy/Modules_Api_Controllers_PublishController.proxy.php

@@ -1,334 +0,0 @@
-<?php
-
-namespace Modules\Api\Controllers;
-
-use App\Constants\AdConstrant;
-use App\Constants\CommentConstant;
-use App\Constants\CommonConstant;
-use App\Model\AdModel;
-use App\Model\UserAgentIncomeModel;
-use App\Repositories\AdRepository;
-use App\Repositories\CommissionRulesRepository;
-use App\Repositories\ConfigRepoistory;
-use App\Repositories\Criterias\FanGroupCriteria;
-use App\Repositories\Criterias\OrderLimitCriteria;
-use App\Repositories\Criterias\RebateOrderCriteria;
-use App\Repositories\FanGroupRepository;
-use App\Repositories\RebateOrderRepository;
-use App\Repositories\Service\CommonService;
-use App\Repositories\Service\QueueService;
-use App\Repositories\Service\UserSingInService;
-use App\Repositories\TaskAwarkLogRepository;
-use App\Repositories\UserLevelRelationRepository;
-use App\Repositories\UserRebateLevelRepoistory;
-use App\Repositories\UserRepository;
-use App\Repositories\UserTaskRepoistory;
-use App\Repositories\Utils\M3u8CacheRepository;
-use Carbon\Carbon;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Api\Responses\RebateOrderPageResponse;
-use Modules\Api\Services\VideoService;
-class PublishController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    public function home()
-    {
-        $userId = $this->getUserId();
-        //可提现余额
-        $res['balance'] = make(UserRepository::class)->findBy('code', $userId, ['balance'])->balance;
-        //连续签到次数
-        $res['last_count'] = make(UserSingInService::class)->getContinuousSignCount($userId);
-        //总业绩
-        $res['total_perf'] = make(RebateOrderRepository::class)->sumUserTotalPerf($userId);
-        //邀请人数
-        $res['invite_people'] = make(UserLevelRelationRepository::class)->getCountNum(['relation_uid' => $userId]);
-        //任务列表
-        $res['task'] = make(UserTaskRepoistory::class)->findAllBy('task_type', 1, ['title', 'subtitle', 'jump_link', 'reward_type']);
-        //今日是否签到
-        $res['is_sign'] = make(UserSingInService::class)->checkSign($userId, date('Y-m'));
-        $taskLogRepo = make(TaskAwarkLogRepository::class);
-        $where['uid'] = $userId;
-        foreach ($res['task'] as &$task) {
-            $task['is_ok'] = 1;
-            switch ($task['reward_type']) {
-                case 1:
-                    $where['reward_way'] = 2;
-                    break;
-                case 2:
-                    $where['date'] = date('Y-m-d');
-                    $where['reward_way'] = 3;
-                    break;
-                case 3:
-                    $where['reward_way'] = 4;
-                    break;
-                case 4:
-                    $where['date'] = date('Y-m-d');
-                    $where['reward_way'] = 5;
-                    break;
-                case 5:
-                    $where['reward_way'] = 6;
-                    break;
-                case 6:
-                    $where['reward_way'] = 7;
-                    break;
-                case 9:
-                    $where['reward_way'] = 9;
-                    break;
-            }
-            $awarkLogInfo = $taskLogRepo->findUserRewardWay($where);
-            if (!empty($awarkLogInfo)) {
-                $task['is_ok'] = 2;
-            }
-            unset($task['reward_type']);
-        }
-        //签到奖励
-        $res['sign_in_reward'] = make(ConfigRepoistory::class)->get('sign_in_reward', 'rule');
-        //广告
-        $adPosition = AdConstrant::VIDEO_FIND;
-        $videoService = make(VideoService::class);
-        $adList = $videoService->getAdList($adPosition);
-        $adList1 = $videoService->getAdList(AdConstrant::DISCOVER_HOME1);
-        $adList2 = $videoService->getAdList(AdConstrant::DISCOVER_HOME2);
-        //        $adList3 = $videoService->getAdList(AdConstrant::DISCOVER_HOME3);
-        $ad = null;
-        $ads1 = $ads2 = $ads3 = null;
-        if (!empty($adList[0])) {
-            $link = M3u8CacheRepository::getLinkUrl($adList[0]['link'], ['user_code' => $userId]);
-            $ad = ['title' => $adList[0]['title'], 'cover' => !empty($adList[0]['cover']) ? M3u8CacheRepository::getImageUrl($adList[0]['cover']) : '', 'link' => $link, 'scheme' => $adList[0]['scheme']];
-        }
-        if (!empty($adList1)) {
-            $ads1 = [];
-            foreach ($adList1 as $v) {
-                $link = M3u8CacheRepository::getLinkUrl($v['link'], ['user_code' => $userId]);
-                $ads1[] = ['title' => $v['title'], 'cover' => !empty($v['cover']) ? M3u8CacheRepository::getImageUrl($v['cover']) : '', 'link' => $link, 'scheme' => $v['scheme']];
-            }
-        }
-        if (!empty($adList2)) {
-            $ads2 = [];
-            foreach ($adList2 as $v) {
-                $link = M3u8CacheRepository::getLinkUrl($v['link'], ['user_code' => $userId]);
-                $ads2[] = ['title' => $v['title'], 'cover' => !empty($v['cover']) ? M3u8CacheRepository::getImageUrl($v['cover']) : '', 'link' => $link, 'scheme' => $v['scheme']];
-            }
-        }
-        $res['ad'] = $ad;
-        $res['ads1'] = $ads1;
-        $res['ads1_seconds'] = 5;
-        // 自动播放秒数
-        $res['ads2'] = $ads2;
-        $res['ads2_seconds'] = 5;
-        // 自动播放秒数
-        return json_success($res);
-    }
-    /**
-     * 签到
-     *
-     * @return mixed
-     */
-    public function singIn()
-    {
-        $userId = $this->getUserId();
-        $singInSer = make(UserSingInService::class);
-        //获取今天是否签到
-        $inCheckSign = $singInSer->checkSign($userId, date('Y-m'));
-        if ($inCheckSign) {
-            return json_fail('今日已签到,请勿重复签到!');
-        }
-        //签到
-        $singInSer->doSigns($userId);
-        //异步调度
-        $result = make(QueueService::class)->sendSignInRewardsJob(['user_id' => $userId]);
-        if (!$result) {
-            return json_fail('签到失败!');
-        }
-        $res['last_count'] = make(UserSingInService::class)->getContinuousSignCount($userId);
-        return json_success($res);
-    }
-    /**
-     * 代理明细数据
-     *
-     * @return mixed
-     */
-    public function nationalAgentInfo()
-    {
-        $userId = $this->getUserId();
-        //总业绩
-        $res['total_perf'] = make(RebateOrderRepository::class)->sumUserTotalPerf($userId);
-        //返佣等级
-        $userLevel = make(UserRepository::class)->findBy('code', $userId, ['vip_level']);
-        $res['rebate_level'] = $userLevel->vip_level;
-        //返佣比例
-        $res['rebate_ratio'] = make(CommissionRulesRepository::class)->getLevelMaxRebateRatio($userLevel->vip_level, $res['total_perf']);
-        //业绩贡献数据
-        $res['user_devote_rerf'] = make(RebateOrderRepository::class)->userGradeRerf($userId);
-        //全民收益榜
-        $res['earnings_list'] = [];
-        $lists = UserAgentIncomeModel::query()->orderBy('perf_total', 'DESC')->get(['avatar', 'agent_name', 'perf_total']);
-        if ($lists->count()) {
-            $lists = $lists->toArray();
-            foreach ($lists as &$v) {
-                $v['avatar'] = M3u8CacheRepository::getImageUrl($v['avatar']);
-            }
-            $res['earnings_list'] = $lists;
-        }
-        return json_success($res);
-    }
-    /**
-     * 佣金收益明细
-     *
-     * @return mixed|RebateOrderPageResponse
-     */
-    public function incomeDetailList()
-    {
-        $inputData = $this->getJsonData();
-        $userId = $this->getUserId();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['id', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommentConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommentConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $inputData['user_id'] = $userId;
-        $field = ['rebate_amount', 'rebate_level', 'quilt_uid'];
-        $lists = make(RebateOrderRepository::class)->pushCriteria(new RebateOrderCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page);
-        return new RebateOrderPageResponse($lists);
-    }
-    /**
-     * 限时任务
-     *
-     * @return mixed
-     */
-    public function timeTask()
-    {
-        $date = Carbon::now()->toDayDateTimeString();
-        $userId = $this->getUserId();
-        //广告
-        $adPosition = AdConstrant::DISCOVER_TASK;
-        $videoService = make(VideoService::class);
-        $adList = $videoService->getAdList($adPosition);
-        $adList1 = $videoService->getAdList(AdConstrant::TASK_BANNER1);
-        $ad = null;
-        $ads1 = null;
-        if (!empty($adList[0])) {
-            $link = M3u8CacheRepository::getLinkUrl($adList[0]['link'], ['user_code' => $userId]);
-            $ad = ['title' => $adList[0]['title'], 'cover' => !empty($adList[0]['cover']) ? M3u8CacheRepository::getImageUrl($adList[0]['cover']) : '', 'link' => $link, 'scheme' => $adList[0]['scheme']];
-        }
-        if (!empty($adList1)) {
-            $ads1 = [];
-            foreach ($adList1 as $v) {
-                $link = M3u8CacheRepository::getLinkUrl($v['link'], ['user_code' => $userId]);
-                $ads1[] = ['title' => $v['title'], 'cover' => !empty($v['cover']) ? M3u8CacheRepository::getImageUrl($v['cover']) : '', 'link' => $link, 'scheme' => $v['scheme']];
-            }
-        }
-        $res['ad'] = $ad;
-        $res['ads1'] = $ads1;
-        $res['ads1_seconds'] = 5;
-        // 自动播放秒数.
-        //获取推广总人数
-        $spreadNumber = make(UserLevelRelationRepository::class)->getCountNum(['relation_uid' => $userId, 'relation_level' => 1]);
-        $taskInfo = make(UserTaskRepoistory::class)->findBy('reward_type', 7);
-        $taskCondition = json_decode($taskInfo->task_condition, true);
-        $reward = json_decode($taskInfo->reward, true);
-        $subtitle = explode(',', $taskInfo->subtitle);
-        $res['end_time'] = $taskCondition['end_time'];
-        $endTime = strtotime($taskCondition['end_time']);
-        $todyDate = strtotime(date('Y-m-d'));
-        $res['last_time'] = round(($endTime - $todyDate) / 3600 / 24);
-        // 防止填写错误 数据修正
-        if ($res['last_time'] < 0) {
-            $res['last_time'] = 0;
-        }
-        $res['task_list'] = [];
-        foreach ($taskCondition['condition'] as $k => $val) {
-            $res['task_list'][$k]['title'] = $taskInfo->title;
-            $res['task_list'][$k]['subtitle'] = $subtitle[$k];
-            $res['task_list'][$k]['condition'] = $val;
-            //任务条件
-            $res['task_list'][$k]['reward'] = $reward[$k];
-            if ($spreadNumber >= $val) {
-                $res['task_list'][$k]['fulfill_number'] = $val;
-                $res['task_list'][$k]['is_ok'] = 1;
-            } else {
-                $res['task_list'][$k]['fulfill_number'] = $spreadNumber;
-                $res['task_list'][$k]['is_ok'] = 2;
-            }
-        }
-        return json_success($res);
-    }
-    /**
-     * 收益排行榜
-     *
-     * @return mixed
-     */
-    public function incomeList()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['income_type' => 'nullable|in:1,2,3'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $res = make(UserRebateLevelRepoistory::class)->getUserIncomeList($inputData['income_type']);
-        return json_success($res);
-    }
-    /**
-     * 我的收益
-     *
-     * @return mixed
-     */
-    public function myIncome()
-    {
-        $res = make(UserRebateLevelRepoistory::class)->userIncome($this->getUserId());
-        return json_success($res);
-    }
-    /**
-     * 粉丝群列表
-     *
-     * @return mixed
-     */
-    public function fanGroupLists()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['sort', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $inputData['status'] = 1;
-        $field = ['log', 'title', 'link'];
-        $res = make(FanGroupRepository::class)->pushCriteria(new FanGroupCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page);
-        foreach ($res->items() as &$val) {
-            $val->log = M3u8CacheRepository::getImageUrl($val->log);
-        }
-        return json_success($res);
-    }
-}

+ 0 - 276
runtime/container/proxy/Modules_Api_Controllers_RelationController.proxy.php

@@ -1,276 +0,0 @@
-<?php
-
-/**
- * 关系api.
- *
- * @author ningque
- * @date   2020-02-20 02:12:58
- */
-declare (strict_types=1);
-namespace Modules\Api\Controllers;
-
-use App\Constants\CommonConstant;
-use App\Model\Mongo\UserRelationModel;
-use App\Model\Mongo\VideoLikeModel;
-use App\Model\UserModel;
-use App\Model\VideoModel;
-use App\Repositories\RelationRepository;
-use App\Repositories\Service\CommonService;
-use App\Repositories\Service\QueueService;
-use App\Repositories\UserLevelRelationRepository;
-use App\Repositories\UserRepository;
-use App\Repositories\Utils\M3u8CacheRepository;
-use Carbon\Carbon;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Api\Services\VideoService;
-class RelationController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 关注/取消关注
-     * @return mixed
-     */
-    public function doRelation(ValidatorFactoryInterface $validatorFactory)
-    {
-        $userId = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['to_user_id' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $toUserId = strval(data_get($inputData, 'to_user_id'));
-        if ($userId == $toUserId) {
-            return json_fail('自己不能关注自己');
-        }
-        $toUserInfo = make(UserRepository::class)->getUserInfoFromCache($toUserId);
-        if (!$toUserInfo) {
-            return json_fail('用户关态异常');
-        }
-        $favoriteKey = md5('favorite_' . $userId . '_' . $toUserId);
-        $favoriteData = ['_id' => $favoriteKey];
-        $favorite = make(UserRelationModel::class)->db()->countDocuments($favoriteData);
-        $focusResult = false;
-        if ($favorite) {
-            //若已关注,则取消
-            make(UserRelationModel::class)->db()->deleteOne($favoriteData);
-        } else {
-            $focusResult = true;
-            //若未关注,则关注
-            $favoriteData['from_user_id'] = $userId;
-            $favoriteData['to_user_id'] = $toUserId;
-            $favoriteData['date'] = Carbon::now()->toDateTimeString();
-            make(UserRelationModel::class)->db()->insertOne($favoriteData);
-        }
-        make(UserRepository::class)->delUserCache($userId);
-        make(UserRepository::class)->delUserCache($toUserId);
-        return json_success($focusResult);
-    }
-    /**
-     * 关注列表(含关注和被关注)
-     * @return mixed
-     */
-    public function list(ValidatorFactoryInterface $validatorFactory)
-    {
-        $userId = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['type' => 'required|in:favorite,fans', 'page' => 'nullable|numeric', 'page_size' => 'nullable|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $type = data_get($inputData, 'type');
-        $page = intval(data_get($inputData, 'page', 1));
-        $pageSize = intval(data_get($inputData, 'page_size', 10));
-        $skip = ($page - 1) * $pageSize;
-        if ($type == 'favorite') {
-            $data = ['from_user_id' => $userId];
-        } else {
-            $data = ['to_user_id' => $userId];
-        }
-        $options = ['skip' => $skip, 'limit' => $pageSize, 'sort' => ['date' => -1]];
-        $tmp = make(UserRelationModel::class)->db()->find($data, $options);
-        $result['list'] = [];
-        if ($tmp) {
-            $ids = [];
-            $needUserId = $type == 'favorite' ? 'to_user_id' : 'from_user_id';
-            foreach ($tmp->toArray() as $t) {
-                $ids[] = $t[$needUserId];
-            }
-            $result['list'] = UserModel::query()->select(['code', 'nick', 'avatar'])->whereIn('code', $ids)->get();
-            if (!empty($result['list'])) {
-                foreach ($result['list'] as $k => $v) {
-                    $result['list'][$k]['avatar'] = M3u8CacheRepository::getImageUrl($result['list'][$k]['avatar']);
-                }
-            }
-        }
-        return json_success($result);
-    }
-    /**
-     * 我点赞过的视频分页列表.
-     * @return mixed
-     */
-    public function likeVideoList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = [
-            'is_long' => 'nullable|int',
-            // 目前只有短视频,无视这个参数.
-            'page' => 'nullable|numeric',
-            'page_size' => 'nullable|numeric',
-        ];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = intval(data_get($inputData, 'page', 1));
-        $pageSize = intval(data_get($inputData, 'page_size', 10));
-        $skip = ($page - 1) * $pageSize;
-        $relationRepo = make(RelationRepository::class);
-        $userCode = $this->getUserId();
-        $filters = ['uid' => $userCode];
-        $amountVideo = make(VideoLikeModel::class)->db()->countDocuments($filters);
-        $maxPages = ceil($amountVideo / $pageSize);
-        $options = ['skip' => $skip, 'limit' => $pageSize, 'sort' => ['date' => -1]];
-        $video_like = make(VideoLikeModel::class)->db()->find(['uid' => $userCode], $options)->toArray();
-        $result = ['current_page' => $page, 'data' => [], 'first_page_url' => '', 'from' => null, 'last_page' => $maxPages, 'last_page_url' => '', 'next_page_url' => null, 'path' => '', 'per_page' => $pageSize, 'prev_page_url' => '', 'to' => null, 'total' => $amountVideo];
-        $columns = ['id', 'title', 'cover', 'like', 'uid', 'coins', 'pay_type', 'mu', 'comment', 'watch', 'resolution', 'duration'];
-        if (!empty($video_like)) {
-            $arrIds = [];
-            foreach ($video_like as $v) {
-                $arrIds[] = $v['vid'];
-            }
-            $arrIds = array_slice($arrIds, 0, 100);
-            // 最大100
-            $id_str = implode(',', $arrIds);
-            $result2 = VideoModel::query()->with(['category:type.id as type_id,type.title', 'user'])->whereIn('id', $arrIds)->where(['status' => 1])->orderByRaw('field(id,' . $id_str . ')')->get($columns);
-            if (!empty($result2->isNotEmpty())) {
-                $result['data'] = $result2->toArray();
-                foreach ($result['data'] as $k => &$v) {
-                    $v['mu'] = '';
-                    // 列表干掉m3u8地址.
-                    //                    $v['mu'] = M3u8CacheRepository::getVideoInnerUrl($v['mu'], $userCode, $v['id'], 'video');
-                    $v['cover'] = M3u8CacheRepository::getImageUrl($v['cover']);
-                    if (!empty($v['user'])) {
-                        $v['user']['avatar'] = M3u8CacheRepository::getImageUrl($v['user']['avatar']);
-                        //                        $v['user']['is_focus'] = $relationRepo->userIsFocusOtherUser($userCode, $v['user']['code']);
-                    }
-                    //                    $v['is_my_like'] = $relationRepo->userIsLikeVideo($userCode, $v['id']);
-                    if (!empty($v['category'])) {
-                        foreach ($v['category'] as $ck => $t) {
-                            unset($v['category'][$ck]['pivot']);
-                        }
-                    }
-                }
-            }
-        }
-        return json_success($result);
-    }
-    /**
-     * 视频点赞/取消点赞
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function likeVideo(ValidatorFactoryInterface $validatorFactory)
-    {
-        $user_code = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['video_id' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $videoId = intval(data_get($inputData, 'video_id', 0));
-        $key = $user_code . '_' . $videoId;
-        $_id = substr(md5($key), 8, 16);
-        $data = ['_id' => $_id];
-        $count = make(VideoLikeModel::class)->db()->countDocuments($data);
-        if ($count) {
-            //若已关注,则取消
-            make(VideoLikeModel::class)->db()->deleteOne($data);
-            make(QueueService::class)->addVideoLikeJob(['video_id' => $videoId, 'amount' => -1]);
-            $result = 0;
-        } else {
-            $videoInfo = VideoModel::query()->find($videoId, ['uid'])->toArray();
-            //若未关注,则关注
-            $data['uid'] = $user_code;
-            $data['vid'] = $videoId;
-            $data['date'] = Carbon::now()->toDateTimeString();
-            $data['video_user_uid'] = (string) $videoInfo['uid'];
-            // 记录作者UID
-            make(VideoLikeModel::class)->db()->insertOne($data);
-            make(QueueService::class)->addVideoLikeJob(['video_id' => $videoId, 'amount' => 1]);
-            $result = 1;
-        }
-        make(UserRepository::class)->delUserCache($user_code);
-        return json_success($result);
-    }
-    public function myInvitePages(ValidatorFactoryInterface $validatorFactory)
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|numeric', 'page_size' => 'nullable|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = intval(data_get($inputData, 'page', 1));
-        $pageSize = intval(data_get($inputData, 'page_size', 10));
-        $lists = make(UserLevelRelationRepository::class)->userInvitePages($userCode, $page, $pageSize);
-        return json_success($lists);
-    }
-    public function followUserPages(ValidatorFactoryInterface $validatorFactory)
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['user_code' => 'required|max:16', 'page' => 'nullable|numeric', 'page_size' => 'nullable|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $type = 'favorite';
-        $page = intval(data_get($inputData, 'page', 1));
-        $pageSize = intval(data_get($inputData, 'page_size', 10));
-        $page = format_page($page);
-        if ($pageSize > 50) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $skip = ($page - 1) * $pageSize;
-        $data = ['from_user_id' => $inputData['user_code']];
-        $options = ['skip' => $skip, 'limit' => $pageSize, 'sort' => ['date' => -1]];
-        $relationRepo = make(UserRelationModel::class);
-        $amount = $relationRepo->db()->countDocuments($data);
-        $lists = $relationRepo->db()->find($data, $options);
-        $arrData = ['current_page' => $page, 'per_page' => $pageSize, 'total' => $amount, 'data' => []];
-        if (!empty($lists)) {
-            $arrIds = [];
-            foreach ($lists->toArray() as $v) {
-                $arrIds[] = $v['to_user_id'];
-            }
-            $columns = ['id', 'code', 'nick', 'avatar'];
-            $users = UserModel::query()->whereIn('code', $arrIds)->get($columns);
-            if ($users->count()) {
-                $users = $users->toArray();
-                foreach ($users as $v) {
-                    $videoCount = VideoModel::query()->where(['uid' => $v['code'], 'status' => 1])->count();
-                    $arrData['data'][] = ['user_code' => $v['code'], 'nick' => $v['nick'], 'avatar' => M3u8CacheRepository::getImageUrl($v['avatar']), 'video_count' => $videoCount];
-                }
-            }
-        }
-        return json_success($arrData);
-    }
-}

+ 0 - 212
runtime/container/proxy/Modules_Api_Controllers_SiteController.proxy.php

@@ -1,212 +0,0 @@
-<?php
-
-/**
- * 系统设置.
- *
- * @author ningque
- * @date   2020-01-24 16:42:58
- */
-declare (strict_types=1);
-namespace Modules\Api\Controllers;
-
-use App\Controller\CoreController;
-use App\Model\VersionModel;
-use App\Model\ConfigModel;
-use App\Repositories\ConfigRepoistory;
-use App\Repositories\Service\QueueService;
-use Carbon\Carbon;
-use Hyperf\HttpServer\Request;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Api\Services\SiteService;
-use Psr\SimpleCache\CacheInterface;
-class SiteController extends CoreController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    public function ping()
-    {
-        return 'pong';
-    }
-    public function result()
-    {
-        $params = $this->request->all();
-        if ($params['file_path']) {
-            $info = finfo_open(FILEINFO_MIME_TYPE);
-            $type = finfo_file($info, $params['file_path']);
-            if (!in_array($type, ['video/mp4', 'image/png', 'image/jpg', 'image/jpeg', 'image/gif']) || !$params['dir']) {
-                return response('文件类型错误' . $type . '或目录不存在', 400);
-            }
-            finfo_close($info);
-            $data['file_name'] = $params['file_name'];
-            $data['file_size'] = $params['file_size'];
-            if ($type != 'video/mp4') {
-                $data['file_path'] = make(SiteService::class)->encryptImage($params['file_path'], $params['dir']);
-            } else {
-                $data['file_path'] = make(SiteService::class)->moveVideo($params['file_path'], $params['dir']);
-            }
-            $res = ['result' => $data, 'code' => 0, 'message' => '上传成功'];
-            return response()->json($res);
-        } else {
-            return response()->json('fail', 400);
-        }
-    }
-    public function auth()
-    {
-        $params = $this->request->all();
-        if ($params['platform'] == 'I') {
-            $secret = 'pb5pe0MXChXsic0N';
-        }
-        if ($params['platform'] == 'A') {
-            $secret = '4rKFwocMESIp4Anf';
-        }
-        if ($params['platform'] == 'P') {
-            $secret = 'Z6Kbz8hpT9VtGmcu';
-        }
-        if (!$params['platform'] || !$params['timestamp'] || !$params['sign'] || !isset($secret)) {
-            logger('sign:参数缺失', $params);
-            return response('参数缺失', 403);
-        }
-        if (abs(time() - $params['timestamp']) > 3600) {
-            logger('sign:时间验签失败' . time(), $params);
-            return response('时间验签失败', 403);
-        }
-        $sign = strtoupper(md5($params['platform'] . $params['timestamp'] . $secret));
-        if ($sign != $params['sign']) {
-            logger('sign:时间验签失败' . $sign, $params);
-            return response('签名验签失败', 403);
-        }
-        return json_success('ok');
-    }
-    public function move()
-    {
-        $params = $this->request->all();
-        logger('开始移动文件:', $params);
-        if (!isset($params['filepath']) || !isset($params['pathname'])) {
-            logger('move', ['filepath/pathname不能为空']);
-            return false;
-        }
-        if (!in_array($params['pathname'], ['vu', 'va', 'vd'])) {
-            logger('move', ['mp4下载二级目录地址错误']);
-            return false;
-        }
-        $path = '/var/www/resource/wp/mp/' . $params['pathname'] . '/' . date('mdH', time());
-        $newname = $path . '/' . md5(microtime()) . mt_rand(1000, 9999) . '.mp4';
-        make(SiteService::class)->mkDirs($path);
-        if (rename($params['filepath'], $newname)) {
-            logger('rename', [$newname . '->文件移动成功!']);
-            return true;
-        } else {
-            logger('rename', ['文件移动失败']);
-            return false;
-        }
-    }
-    public function shift()
-    {
-        $params = $this->request->all();
-        if (!$params['path'] || !$params['table'] || !$params['id'] || !$params['update']) {
-            return json_fail('error');
-        }
-        $result = make(SiteService::class)->videoShift($params['path'], $params['table'], $params['id'], $params['update']);
-        return json_success($result);
-    }
-    public function pushCrashLog(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        // Demo 这是在控制器内校验器的写法.
-        $rules = ['ua' => 'required', 'user_id' => 'nullable', 'message' => 'required', 'version' => 'required', 'device_no' => 'required', 'device_type' => 'required|in:A,I,H'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $result = make(QueueService::class)->crashLogPush(['ua' => $inputData['ua'], 'user_id' => $inputData['user_id'] ?? '', 'message' => $inputData['message'], 'version' => $inputData['version'], 'device_no' => $inputData['device_no'], 'device_type' => $inputData['device_type']]);
-        return json_success($result);
-    }
-    public function getVersion(Request $request, ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $request->all();
-        // Demo 这是在控制器内校验器的写法.
-        $rules = ['device_type' => 'required|in:A,I,H', 'version_code' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $hVersionCode = data_get($inputData, 'version_code', '');
-        $cacheKey = 'version:' . $inputData['device_type'];
-        if (!empty($hVersionCode)) {
-            $arrTmp = explode('.', $hVersionCode);
-            if (count($arrTmp) != 3) {
-                return json_fail('版本错误');
-            }
-            if (intval($arrTmp[0]) > 99 || intval($arrTmp[1]) > 99 || intval($arrTmp[2]) > 99) {
-                return json_fail('版本溢出错误');
-            }
-            $cacheKey .= ':v' . $hVersionCode;
-        }
-        $result = make(CacheInterface::class)->remember($cacheKey, 60 * 60, function () use($inputData, $hVersionCode) {
-            $conditions = ['status' => 1, 'device_type' => $inputData['device_type'], 'version_type' => 'free'];
-            if (!empty($hVersionCode)) {
-                $conditions['version_code'] = $hVersionCode;
-            }
-            $item = VersionModel::query()->where($conditions)->orderByDesc('version_code')->first();
-            if (!empty($item)) {
-                $item = $item->toArray();
-                $item['app_url'] = make(ConfigRepoistory::class)->get('share_url', 'sys');
-                $conditions = ['status' => 1, 'device_type' => $inputData['device_type'], 'version_type' => 'merge', 'version_code' => $item['version_code']];
-                $item2 = VersionModel::query()->where($conditions)->orderByDesc('version_code')->first();
-                $item['merge_path'] = '';
-                // 分割下载url
-                if (!empty($item2)) {
-                    $item['merge_path'] = $item2['package_path'];
-                }
-                return $item;
-            } else {
-                return null;
-            }
-        });
-        $res = ['code' => 200, 'message' => '', 'data' => $result, 'handshake' => ''];
-        return response()->json($res);
-    }
-    /**
-     *  提供给H5-获取最新版本下载地址
-     */
-    public function getVersionH5(Request $request, ValidatorFactoryInterface $validatorFactory)
-    {
-        $android_info = VersionModel::query()->where(['status' => 1, 'device_type' => 'A', 'version_type' => 'free'])->orderByDesc('version_code')->first();
-        $ios_free_info = VersionModel::query()->where(['status' => 1, 'device_type' => 'I', 'version_type' => 'free'])->orderByDesc('version_code')->first();
-        $ios_shop_info = VersionModel::query()->where(['status' => 1, 'device_type' => 'I', 'version_type' => 'shop'])->orderByDesc('version_code')->first();
-        $ios_testflight_info = VersionModel::query()->where(['status' => 1, 'device_type' => 'I', 'version_type' => 'testflight'])->orderByDesc('version_code')->first();
-        $ios_enterprise_info = VersionModel::query()->where(['status' => 1, 'device_type' => 'I', 'version_type' => 'enterprise'])->orderByDesc('version_code')->first();
-        $ios_super_info = VersionModel::query()->where(['status' => 1, 'device_type' => 'I', 'version_type' => 'super'])->orderByDesc('version_code')->first();
-        $ios_ipa_info = VersionModel::query()->where(['status' => 1, 'device_type' => 'I', 'version_type' => 'ipa'])->orderByDesc('version_code')->first();
-        $ios_ipa_gbox = VersionModel::query()->where(['status' => 1, 'device_type' => 'I', 'version_type' => 'gbox'])->orderByDesc('version_code')->first();
-        $androidMergeInfo = VersionModel::query()->where(['status' => 1, 'device_type' => 'A', 'version_type' => 'merge'])->orderByDesc('version_code')->first();
-        $potato_info = ConfigModel::query()->where('skey', 'potoato_url')->first();
-        $data = ['url_android' => $android_info ? $android_info->package_path : '', 'url_android_merge' => $androidMergeInfo ? $androidMergeInfo->package_path : '', 'url_ios_free' => $ios_free_info ? $ios_free_info->package_path : '', 'url_ios_shop' => $ios_shop_info ? $ios_shop_info->package_path : '', 'url_ios_testflight' => $ios_testflight_info ? $ios_testflight_info->package_path : '', 'url_ios_super' => $ios_super_info ? $ios_super_info->package_path : '', 'url_ios_enterprise' => $ios_enterprise_info ? $ios_enterprise_info->package_path : '', 'url_ios_ipa' => $ios_ipa_info ? $ios_ipa_info->package_path : '', 'url_ios_gbox' => $ios_ipa_gbox ? $ios_ipa_gbox->package_path : '', 'url_potato' => $potato_info ? $potato_info->svalue : ''];
-        $res = ['code' => 200, 'message' => '', 'data' => $data, 'handshake' => ''];
-        return response()->json($res);
-    }
-    public function test123()
-    {
-        $filePath = base_path('storage/cache/m3u8_url/ff19/3e65/ff193e657aeaeb971d072becae6061df.url');
-        if (file_exists($filePath)) {
-            $mtime = filemtime($filePath);
-            $phpDate = date('Y-m-d H:i:s', $mtime);
-            $diffSeconds = Carbon::now()->diffInSeconds(Carbon::parse($mtime));
-            $expiredSeconds = 2 * 60 * 60;
-            // 原始文件保存2小时.
-            $diffSeconds2 = abs($diffSeconds);
-            $isExpired = $diffSeconds > $expiredSeconds;
-            var_dump($mtime, $phpDate, $diffSeconds, $expiredSeconds, $diffSeconds2, $isExpired);
-        }
-        return json_success(['a1' => 'ok']);
-    }
-}

+ 0 - 310
runtime/container/proxy/Modules_Api_Controllers_TagController.proxy.php

@@ -1,310 +0,0 @@
-<?php
-
-namespace Modules\Api\Controllers;
-
-use App\Constants\TagConstant;
-use App\Constants\CommonConstant;
-use App\Model\TypeModel;
-use App\Model\TypeVideoModel;
-use App\Model\UserTagModel;
-use App\Repositories\Utils\M3u8CacheRepository;
-use App\Repositories\VideoRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-class TagController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 个人中心页面,我收藏的口味.
-     * @return mixed
-     */
-    public function homeUser()
-    {
-        $userCode = $this->getUserId();
-        $arrItems = [];
-        $tags = UserTagModel::with(['tag:id,title'])->where(['user_uid' => $userCode])->whereHas('tag', function ($q) {
-            $q->where(['status' => 1]);
-        })->orderByDesc('squad')->orderByDesc('id')->take(TagConstant::USER_MAX_NUM)->get();
-        if ($tags->count()) {
-            $arrTags = $tags->toArray();
-            foreach ($arrTags as $tag) {
-                $tag['title'] = $tag['tag']['title'];
-                $tag['videos'] = [];
-                $videosPage1 = make(VideoRepository::class)->listByTag($tag['tag_id'], $userCode, 1, 3);
-                if (!empty($videosPage1['data'])) {
-                    foreach ($videosPage1['data'] as $video) {
-                        $tag['videos'][] = $video;
-                    }
-                }
-                unset($tag['id'], $tag['user_uid'], $tag['created_at'], $tag['updated_at'], $tag['tag']);
-                $arrItems[] = $tag;
-            }
-        }
-        return json_success($arrItems);
-    }
-    /**
-     * 收藏或者取消口味.
-     * @return mixed|void
-     * @throws \Exception
-     */
-    public function focus()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['tag_id' => 'required|int'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $operateName = '录入';
-        $tagObj = UserTagModel::where(['user_uid' => $userCode, 'tag_id' => $inputData['tag_id']])->first();
-        if (empty($tagObj)) {
-            $count = UserTagModel::where(['user_uid' => $userCode])->whereHas('tag', function ($q) {
-                $q->where(['status' => 1]);
-            })->count();
-            if ($count >= TagConstant::USER_MAX_NUM) {
-                return json_fail('最多可收藏' . strval(TagConstant::USER_MAX_NUM) . '个口味');
-            }
-            // 没有记录,则进行收藏操作
-            $setarr = ['tag_id' => $inputData['tag_id'], 'user_uid' => $userCode];
-            $tagObj = UserTagModel::create($setarr);
-        } else {
-            $operateName = '取消';
-            // 取消收藏操作.
-            $tagObj->delete();
-        }
-        return json_success(['result' => 'success', 'operate_name' => $operateName]);
-    }
-    /**
-     * 单个口味里所有视频分页列表.
-     * @return mixed
-     */
-    public function videoPages()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['tag_id' => 'required|int', 'page' => 'nullable|int', 'page_size' => 'nullable|int', 'order_type' => 'nullable'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orderBy = [];
-        $orderType = data_get($inputData, 'order_type', 'new');
-        if ($orderType == 'hot') {
-            $orderBy = [['watch', 'desc'], ['id', 'desc']];
-        }
-        $defaultPageSize = 12;
-        $page = !empty($inputData['page']) ? intval($inputData['page']) : 1;
-        $pageSize = !empty($inputData['page_size']) ? intval($inputData['page_size']) : $defaultPageSize;
-        if ($pageSize > 100) {
-            return json_fail('参数错误');
-        }
-        $page = format_page($page);
-        $videos = make(VideoRepository::class)->listByTag($inputData['tag_id'], $userCode, $page, $pageSize, $orderBy);
-        return json_success($videos);
-    }
-    public function detail()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['tag_id' => 'required|int'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $arrData = ['detail' => [], 'is_focus' => false];
-        $relationObj = UserTagModel::where(['user_uid' => $userCode, 'tag_id' => $inputData['tag_id']])->first();
-        if (!empty($relationObj)) {
-            $arrData['is_focus'] = true;
-        }
-        $tagObj = TypeModel::where(['id' => $inputData['tag_id']])->first(['id', 'title', 'cover', 'description']);
-        if (!empty($tagObj)) {
-            $arrData['detail'] = $tagObj->toArray();
-            $arrData['detail']['cover'] = M3u8CacheRepository::getImageUrl($arrData['detail']['cover']);
-        }
-        return json_success($arrData);
-    }
-    /**
-     * 我的口味
-     * @return mixed
-     */
-    public function my()
-    {
-        $userCode = $this->getUserId();
-        $arrData = [];
-        $tags = UserTagModel::where(['user_uid' => $userCode])->with(['tag:id,title,cover,status'])->whereHas('tag', function ($q) {
-            $q->where(['status' => 1]);
-        })->orderByDesc('squad')->orderByDesc('id')->take(TagConstant::USER_MAX_NUM)->get();
-        if ($tags->count()) {
-            $arrTags = $tags->toArray();
-            foreach ($arrTags as $v) {
-                $countVideo = TypeVideoModel::where(['type_id' => $v['tag_id']])->count();
-                $arrData[] = ['id' => $v['tag']['id'], 'title' => !empty($v['tag']['title']) ? $v['tag']['title'] : '', 'cover' => !empty($v['tag']['cover']) ? M3u8CacheRepository::getImageUrl($v['tag']['cover']) : '', 'total_video' => $countVideo];
-            }
-        }
-        return json_success($arrData);
-    }
-    /**
-     * 所有口味分页列表.
-     * @return mixed
-     */
-    public function pages()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|int', 'page_size' => 'nullable|int', 'exclude_my' => 'nullable'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $defaultPageSize = 12;
-        $page = !empty($inputData['page']) ? intval($inputData['page']) : 1;
-        $pageSize = !empty($inputData['page_size']) ? intval($inputData['page_size']) : $defaultPageSize;
-        if ($pageSize > 100) {
-            return json_fail('参数错误');
-        }
-        $page = format_page($page);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $myTagIds = [];
-        $myTtags = UserTagModel::where(['user_uid' => $userCode])->whereHas('tag', function ($q) {
-            $q->where(['status' => 1]);
-        })->limit(100)->get();
-        if ($myTtags->count()) {
-            $myTagIds = $myTtags->pluck('tag_id')->toArray();
-        }
-        $columns = ['id', 'title', 'cover'];
-        $model = TypeModel::query()->where(['status' => 1])->orderByDesc('sort')->orderByDesc('id');
-        if (!empty($inputData['exclude_my']) && !empty($myTagIds)) {
-            $model = $model->whereNotIn('id', $myTagIds);
-        }
-        $items = $model->paginate($pageSize, $columns, 'page', $page);
-        if ($items->isNotEmpty()) {
-            foreach ($items->items() as &$item) {
-                $countVideo = TypeVideoModel::where(['type_id' => $item->id])->count();
-                $item->cover = M3u8CacheRepository::getImageUrl($item->cover);
-                $item->is_followed = false;
-                // 我是否关注过.
-                if (!empty($myTagIds)) {
-                    if (in_array($item->id, $myTagIds)) {
-                        $item->is_followed = true;
-                    }
-                }
-                $item->total_video = $countVideo;
-            }
-        }
-        $items->toArray();
-        return json_success($items);
-    }
-    /**
-     * 替换关注的口味.
-     * @return mixed|void
-     * @throws \Exception
-     */
-    public function exchangeFocus()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = [
-            'source_tag_id' => 'required|int',
-            // 源标签ID
-            'target_tag_id' => 'required|int',
-        ];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $sourceTagId = intval($inputData['source_tag_id']);
-        $targetTagId = intval($inputData['target_tag_id']);
-        if (empty($sourceTagId) || empty($targetTagId)) {
-            return json_fail('参数有误');
-        }
-        if ($sourceTagId == $targetTagId) {
-            return json_fail('前后标口味不能相同');
-        }
-        // 删除.
-        UserTagModel::where(['user_uid' => $userCode, 'tag_id' => $sourceTagId])->delete();
-        $setarr = ['tag_id' => $targetTagId, 'user_uid' => $userCode];
-        // 添加.
-        $relationObj = UserTagModel::create($setarr);
-        if (!empty($relationObj)) {
-            return json_success(['result' => 'success']);
-        } else {
-            return json_fail('替换失败');
-        }
-    }
-    /**
-     * 我关注的口味里所有视频分页列表.
-     * @return mixed
-     */
-    public function myFollowedVideoPages()
-    {
-        $userCode = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|int', 'page_size' => 'nullable|int'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $defaultPageSize = 12;
-        $page = !empty($inputData['page']) ? intval($inputData['page']) : 1;
-        $pageSize = !empty($inputData['page_size']) ? intval($inputData['page_size']) : $defaultPageSize;
-        if ($pageSize > 100) {
-            return json_fail('参数错误');
-        }
-        $page = format_page($page);
-        $videos = make(VideoRepository::class)->listByUserFollowTag($userCode, $page, $pageSize);
-        $arrData = $videos;
-        if (!empty($videos['data'])) {
-            foreach ($videos['data'] as $k => $v) {
-                $arrData['data'][$k] = ['type' => 'v', 'video' => $v];
-            }
-        }
-        unset($videos);
-        return json_success($arrData);
-    }
-    /**
-     * 首页口味(20220501)
-     * @return mixed
-     */
-    public function tab1()
-    {
-        $userCode = $this->getUserId();
-        $myTags = [];
-        $columns = ['id', 'title', 'cover'];
-        $myItems = UserTagModel::with(['tag'])->where(['user_uid' => $userCode])->whereHas('tag', function ($q) {
-            $q->where(['status' => 1]);
-        })->get();
-        if ($myItems->count()) {
-            foreach ($myItems as $item) {
-                if (!empty($item->tag) && $item->tag->status == 1) {
-                    $myTags[] = ['id' => $item->tag->id, 'title' => $item->tag->title];
-                }
-            }
-        }
-        $all = [];
-        $model = TypeModel::query()->where(['status' => 1])->orderByDesc('sort')->orderByDesc('id');
-        $items = $model->get($columns);
-        if ($items->isNotEmpty()) {
-            foreach ($items as $item) {
-                $all[] = ['id' => $item->id, 'title' => $item->title];
-            }
-        }
-        $result = ['all' => $all, 'my_tags' => $myTags];
-        return json_success($result);
-    }
-}

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

@@ -1,92 +0,0 @@
-<?php
-
-/**
- * 测试.
- *
- * @author liulang <liulang201902@gmail.com>
- * @date   2020-01-22 09:37:54
- */
-declare (strict_types=1);
-namespace Modules\Api\Controllers;
-
-use App\Model\Mongo\VideoHistoryModel;
-use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
-use Carbon\Carbon;
-use Hyperf\HttpMessage\Stream\SwooleStream;
-class TestController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    public function pay()
-    {
-        return json_success('haha');
-    }
-    public function mongo()
-    {
-        $pipeline = [['$match' => ['created_at' => ['$gte' => '2019-01-01', '$lte' => '2019-01-02'], 'platform' => 'a']], ['$group' => ['_id' => 'platform', 'count' => ['$sum' => 1]]]];
-        //$result1 = make(VideoHistoryModel::class)->db()->findOne(['date'=>'2020-02-18']);
-        //$result2 = make(VideoHistoryModel::class)->db()->find()->toArray();
-        //$result3 = make(VideoHistoryModel::class)->db()->insertOne(['uid'=>1,'vid'=>2])->getInsertedId();
-        //$result4 = make(VideoHistoryModel::class)->db()->findOneAndUpdate(['_id'=>'1212'],['$set' =>['vid'=>3]]);
-        //$result5 = make(VideoHistoryModel::class)->db()->deleteOne(['vid'=>3]);
-        //$result6 = make(VideoHistoryModel::class)->db()->deleteMany(['vid'=>3])->getDeletedCount();
-        //$result7 = make(VideoHistoryModel::class)->db()->countDocuments(['uid'=>1,'vid'=>4]);
-        //$result8 = make(VideoHistoryModel::class)->db()->updateOne(['_id'=>'1212'],['$set' =>['vid'=>4]]);
-        $result9 = make(VideoHistoryModel::class)->db()->aggregate($pipeline);
-        return json_success($result7);
-    }
-    /**
-     * 演示导出excel
-     * 组件官方使用手册https://opensource.box.com/spout/docs/#configuration-for-xlsx-and-ods
-     * 因为swoole 接管了response,不能使用它的方法openToBrowser
-     * 需要定期删除storage/tmp目录,删除策略,glob文件,看每个文件的修改日期,超过1周则删除。可以写一个定时任务.
-     * @return mixed
-     */
-    public function exportDemoExcel()
-    {
-        try {
-            $fileName = 'export_demo_' . Carbon::now()->format('Y_m_d') . '_' . random(6) . '.xlsx';
-            $filePath = BASE_PATH . '/storage/tmp/' . $fileName;
-            $writer = WriterEntityFactory::createXLSXWriter();
-            $writer->setTempFolder(BASE_PATH . '/storage/tmp');
-            $writer->setShouldUseInlineStrings(true);
-            $writer->openToFile($filePath);
-            $firstColumns = ['ID', '姓名'];
-            $lists = [['id' => '101', 'name' => '刘德华'], ['id' => '102', 'name' => '张曼玉']];
-            $mainRows = [];
-            $cells = self::makeOneExportCell($firstColumns);
-            $mainRows[] = WriterEntityFactory::createRow($cells);
-            $cells = [];
-            if (!empty($lists)) {
-                // 故意写!empty,这是demo,foreach一定要判断是否存在.
-                foreach ($lists as $k => $v) {
-                    $rowColumns = [$v['id'], $v['name']];
-                    $cells = self::makeOneExportCell($rowColumns);
-                    $mainRows[] = WriterEntityFactory::createRow($cells);
-                }
-                $writer->addRows($mainRows);
-            }
-            $writer->close();
-        } catch (\Exception $e) {
-            // Todo logger('xxxx').
-        } catch (\Throwable $e) {
-            // Todo logger('xxxx').
-        }
-        return $this->response->withAddedHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')->withAddedHeader('Content-Disposition', 'attachment; filename=' . $fileName)->withAddedHeader('Cache-Control', 'max-age=0')->withAddedHeader('Pragma', 'public')->download($filePath, $fileName);
-    }
-    private function makeOneExportCell($data)
-    {
-        $cells = [];
-        foreach ($data as $k => $v) {
-            $cells[] = WriterEntityFactory::createCell($v);
-        }
-        return $cells;
-    }
-}

+ 0 - 121
runtime/container/proxy/Modules_Api_Controllers_TopicController.proxy.php

@@ -1,121 +0,0 @@
-<?php
-
-/**
- * 话题控制器.
- *
- * @author zhangjunbao <junbaoz1314@gmail.com>
- * @date   2020-01-29 10:13:09
- */
-declare (strict_types=1);
-namespace Modules\Api\Controllers;
-
-use App\Constants\CommonConstant;
-use App\Repositories\Criterias\OrderLimitCriteria;
-use App\Repositories\Criterias\TopicCriteria;
-use App\Repositories\TopicRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Api\Responses\TopicPagesResponse;
-use Modules\Manage\Responses\CommonSuccessPkResponse;
-class TopicController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    public function lists()
-    {
-        $inputData = $this->getJsonData();
-        $rules = [
-            'page' => 'nullable|integer',
-            'page_size' => 'nullable|integer',
-            'category_id' => 'nullable|integer',
-            'top_type' => 'nullable|string',
-            // all, only_top, not_top
-            'digest' => 'nullable|string',
-        ];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['created_at', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $plusParams = [];
-        $criteriaParams = $inputData;
-        $criteriaParams['status'] = 1;
-        // 追加状态条件.
-        $lists = make(TopicRepository::class)->pushCriteria(new TopicCriteria($criteriaParams))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        return new TopicPagesResponse($lists);
-    }
-    public function create()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['category_id' => 'required|integer', 'content' => 'required|max:1000', 'ct_type' => 'required|integer|in:1,2', 'video_id' => 'required_if:ct_type,2', 'mulit_pic' => 'nullable|array'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $userId = $this->getUserId();
-        $categoryId = intval(data_get($inputData, 'category_id', 0));
-        $content = strval(data_get($inputData, 'content', ''));
-        $ctType = intval(data_get($inputData, 'ct_type', 1));
-        $videoId = strval(data_get($inputData, 'video_id', ''));
-        $arrMulitPic = data_get($inputData, 'mulit_pic', []);
-        $status = $ctType == 2 ? 3 : 1;
-        $firstPic = '';
-        $arrData = [];
-        if (!empty($arrMulitPic)) {
-            $arrData['mulit_pic'] = $arrMulitPic;
-            reset($arrMulitPic);
-            $firstPic = current($arrMulitPic);
-            // 取第一张图.
-        }
-        // 封面.
-        $coverPic = $firstPic;
-        $sdata = json_encode($arrData, JSON_UNESCAPED_UNICODE);
-        $setarr = ['user_id' => $userId, 'category_id' => $categoryId, 'content' => $content, 'ct_type' => $ctType, 'video_id' => $videoId, 'status' => $status, 'cover_pic' => $coverPic, 'sdata' => $sdata];
-        $item = make(TopicRepository::class)->createTopic($setarr);
-        if (empty($item->id)) {
-            return json_fail('话题失败了');
-        }
-        return new CommonSuccessPkResponse($item->id);
-    }
-    public function support()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|integer'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $id = intval(data_get($inputData, 'id', 0));
-        $item = make(TopicRepository::class)->find($id);
-        if (!$item) {
-            return json_fail('点赞失败哦');
-        }
-        $item->total_support = intval($item->total_support) + 1;
-        $result = $item->save();
-        if (!$result) {
-            return json_fail('点赞失败了');
-        }
-        $logSubject = '话题点赞';
-        $logSvalue = $id;
-        $this->log($logSubject, $logSvalue);
-        return new CommonSuccessPkResponse($id);
-    }
-}

+ 0 - 43
runtime/container/proxy/Modules_Api_Controllers_UploadController.proxy.php

@@ -1,43 +0,0 @@
-<?php
-
-namespace Modules\Api\Controllers;
-
-class UploadController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    public function image()
-    {
-        $allwImageExts = ['jpg', 'jpeg', 'png', 'gif', 'webp'];
-        $allowImageMimes = ['gif' => 'image/gif', 'jpeg' => 'image/jpeg', 'jpg' => 'image/jpg', 'png' => 'image/png', 'webp' => 'image/webp'];
-        $maxUploadSize = 5 * ($uploadFileName = 'file');
-        if (empty($_FILES[$uploadFileName])) {
-            return json_fail('请选择文件');
-        }
-        $file = $_FILES[$uploadFileName];
-        $fileName = $file['name'];
-        $fileMime = $file['type'];
-        $fileSize = $file['size'];
-        // 单位字节,1024字节=1kb
-        $fileExt = $this->getFileExtension($fileName);
-        if (!in_array($fileExt, $allwImageExts)) {
-            return json_fail('文件无效');
-        }
-    }
-    public function getFileExtension($filename)
-    {
-        $pathinfo = pathinfo($filename);
-        return $pathinfo['extension'];
-    }
-    private function checkIsUploadFile($file)
-    {
-        return is_uploaded_file($file);
-    }
-}

+ 0 - 280
runtime/container/proxy/Modules_Api_Controllers_UserController.proxy.php

@@ -1,280 +0,0 @@
-<?php
-
-/**
- * 用户api.
- *
- * @author zhangjunbao <junbaoz1314@gmail.com>
- * @date   2020-01-10 21:12:58
- */
-declare (strict_types=1);
-namespace Modules\Api\Controllers;
-
-use App\Jobs\RecordSearchJob;
-use App\Constants\CommonConstant;
-use App\Model\Mongo\UserRelationModel;
-use App\Model\UserModel;
-use App\Repositories\ConfigRepoistory;
-use App\Repositories\CreatorRepository;
-use App\Repositories\CreatorRuleRepository;
-use App\Repositories\UserRepository;
-use App\Repositories\Utils\M3u8CacheRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Psr\SimpleCache\CacheInterface;
-class UserController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 用户详情数据
-     * @return mixed
-     */
-    public function info()
-    {
-        //当前用户邀请码
-        $userId = $this->getUserId();
-        $result = make(UserRepository::class)->getUserInfoData($userId);
-        $creatorRepo = make(CreatorRepository::class);
-        $creatorTotalCoin = $creatorTotalIncome = $creatorIncome = $creatorCoin = 0;
-        $creatorObj = $creatorRepo->detail($userId);
-        $dayAddonNum = 0;
-        $dayVideo = 0;
-        if (!empty($creatorObj)) {
-            $creatorTotalCoin = $creatorObj->total_coin;
-            $creatorTotalIncome = $creatorObj->total_income;
-            $dayAddonNum = intval($creatorObj->day_addon_num);
-            $dayVideo = intval($creatorObj->day_video);
-        }
-        $result['creator_total_coin'] = $creatorTotalCoin;
-        $result['creator_total_income'] = $creatorTotalIncome;
-        $ruleRepo = make(CreatorRuleRepository::class);
-        $ruleLevel = $ruleRepo->getRuleByLevel($result['creator_level']);
-        $dayMaxVideo = intval($ruleLevel->day_max_video) + $dayAddonNum;
-        $todayVideo = $dayVideo;
-        $isCanUpload = true;
-        if ($todayVideo >= $dayMaxVideo) {
-            $isCanUpload = false;
-        }
-        $result['creator_day_max_video'] = $dayMaxVideo;
-        $result['creator_today_video'] = $todayVideo;
-        $result['creator_is_can_upload'] = $isCanUpload;
-        $result['upload_is_maintenance'] = false;
-        $result['upload_maintenance_desc'] = '';
-        $configRepo = make(ConfigRepoistory::class);
-        $arrConfig = $configRepo->gets(['upload_maintenance_status', 'upload_maintenance_desc'], 'sys', []);
-        if (isset($arrConfig['upload_maintenance_status']) && intval($arrConfig['upload_maintenance_status']) == 1) {
-            $result['upload_is_maintenance'] = true;
-            $result['upload_maintenance_desc'] = $arrConfig['upload_maintenance_desc'] ?? '上传维护中,请稍后恢复再试';
-        }
-        return json_success($result);
-    }
-    /**
-     * 用户资料数据
-     * @return mixed
-     */
-    public function userData()
-    {
-        //当前用户邀请码
-        $userId = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['code' => 'required|string'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $userInfo = make(UserRepository::class)->getUserInfoFromCache($inputData['code']);
-        if (!$userInfo) {
-            return json_fail('账号异常');
-        }
-        $favoriteKey = md5('favorite_' . $userId . '_' . $userInfo['code']);
-        $favoriteData = ['_id' => $favoriteKey];
-        $attention = make(UserRelationModel::class)->db()->countDocuments($favoriteData);
-        if ($attention) {
-            $is_attention = 1;
-        } else {
-            $is_attention = 0;
-        }
-        $result = array('nick' => $userInfo['nick'] . '', 'avatar' => M3u8CacheRepository::getImageUrl($userInfo['avatar']), 'intro' => $userInfo['intro'] . '', 'birth' => $userInfo['birth'] . '', 'gender' => intval($userInfo['gender']), 'flow' => $userInfo['flow'], 'fans' => $userInfo['fans'], 'like' => $userInfo['like'], 'invite' => $userInfo['invite'], 'is_attention' => $is_attention);
-        return json_success($result);
-    }
-    /**
-     * 根据帐户二维码找回账号
-     * @return mixed
-     */
-    public function findByQrCode()
-    {
-        //当前用户邀请码
-        $userId = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['qrcode' => 'required|string'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $result = make(UserRepository::class)->findByQrcode($userId, $inputData['qrcode']);
-        return json_success($result);
-    }
-    /**
-     * 绑定手机号
-     * @return mixed
-     */
-    public function bindPhone()
-    {
-        //当前用户邀请码
-        $userId = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['phone' => 'required|string|regex:/^1\\d{10}$/', 'code' => 'required|string', 'type' => 'required|in:1,2'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        // 验证code
-        $cache = make(CacheInterface::class);
-        $cache_code = $cache->get('phone:code:' . $inputData['phone']);
-        if (config('app_env') == 'prod') {
-            // 生产环境
-            if ($inputData['code'] != '887462') {
-                if ($cache_code != $inputData['code'] || empty($cache_code)) {
-                    return json_fail('验证码不正确');
-                }
-            }
-        } else {
-            // 非生产环境.
-            if (strval($inputData['code']) != '666666') {
-                if ($cache_code != $inputData['code'] || empty($cache_code)) {
-                    return json_fail('验证码不正确');
-                }
-            }
-        }
-        $result = make(UserRepository::class)->bindPhone($userId, $inputData['phone'], $inputData['type']);
-        return json_success($result);
-    }
-    /**
-     * 更新个人信息
-     * @return mixed
-     */
-    public function update()
-    {
-        $userId = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['nick' => 'nullable|string', 'intro' => 'nullable|string', 'gender' => 'nullable|string', 'birth' => 'nullable|date', 'avatar' => 'nullable|string', 'live_code' => 'nullable|max:16'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $result = make(UserRepository::class)->updateUserData($userId, $inputData);
-        return json_success($result);
-    }
-    /**
-     *
-     * @return mixed
-     */
-    public function bindCode()
-    {
-        //当前用户邀请码
-        $userId = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['code' => 'required|string'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $result = make(UserRepository::class)->bindCode($userId, $inputData['code']);
-        return json_success($result);
-    }
-    /**
-     * 解绑手机号
-     * @return mixed
-     */
-    public function unbindPhone()
-    {
-        //当前用户邀请码
-        $userId = $this->getUserId();
-        $inputData = $this->getJsonData();
-        $rules = ['phone' => 'required|string|regex:/^1\\d{10}$/', 'code' => 'required|string'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        // 验证code
-        $cache = make(CacheInterface::class);
-        $cache_code = $cache->get('phone:code:' . $inputData['phone']);
-        if ($cache_code != $inputData['code'] || empty($cache_code)) {
-            return json_fail('验证码不正确');
-        }
-        $result = make(UserRepository::class)->bindPhone($userId, $inputData['phone'], $inputData['code']);
-        return json_success($result);
-    }
-    /**
-     * 获取默认头像.
-     * @return mixed
-     */
-    public function defaultAvatars()
-    {
-        $arrData = [];
-        $filePrefix = 'f2|/' . env('STATIC_DIR_NAME', 'doukui') . '/avatars/a_';
-        $maxNum = 11;
-        for ($i = 1; $i <= $maxNum; $i++) {
-            $tmpNum = str_pad(strval($i), 3, '0', STR_PAD_LEFT);
-            $groupUrl = $filePrefix . $tmpNum . '.ceb';
-            $fullUrl = M3u8CacheRepository::getImageUrl($groupUrl);
-            $arrData[] = ['group_url' => $groupUrl, 'full_url' => $fullUrl];
-        }
-        return json_success($arrData);
-    }
-    /**
-     * 搜索用户.
-     * @return mixed
-     */
-    public function searchPages()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['nick' => 'required|string|max:64', 'page' => 'nullable|int', 'page_size' => 'nullable|int'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $userCode = $this->getUserId();
-        $defaultPageSize = 10;
-        $page = !empty($inputData['page']) ? intval($inputData['page']) : 1;
-        $pageSize = !empty($inputData['page_size']) ? intval($inputData['page_size']) : $defaultPageSize;
-        if ($pageSize > 100) {
-            return json_fail('参数错误');
-        }
-        $page = format_page($page);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $columns = ['id', 'nick', 'intro', 'avatar', 'fans', 'flow', 'like', 'gender', 'code'];
-        $items = UserModel::query()->where(['nick' => $inputData['nick'], 'status' => 1])->orderBy('id', 'DESC')->paginate($pageSize, $columns, 'page', $page);
-        $arrData = [];
-        if ($items->isNotEmpty()) {
-            $arrData = $items->toArray();
-            foreach ($arrData['data'] as $k => &$v) {
-                $v['avatar'] = M3u8CacheRepository::getImageUrl($v['avatar']);
-                if ($v['gender'] == 3) {
-                    $v['gender'] = 2;
-                }
-                unset($v['id']);
-            }
-        }
-        // 异步记录搜索记录.
-        $jobParams = ['event_name' => 'user', 'user_code' => $userCode, 'keywords' => data_get($inputData, 'nick', ''), 'module' => 'user'];
-        dispatch_job(new RecordSearchJob($jobParams));
-        return json_success($arrData);
-    }
-}

+ 0 - 848
runtime/container/proxy/Modules_Api_Controllers_VideoController.proxy.php

@@ -1,848 +0,0 @@
-<?php
-
-/**
- * 视频api.
- *
- * @author ningque
- * @date   2020-02-18 11:12:58
- */
-declare (strict_types=1);
-namespace Modules\Api\Controllers;
-
-use App\Jobs\RecordSearchJob;
-use App\Constants\AdConstrant;
-use App\Constants\CommonConstant;
-use App\Constants\VideoConstant;
-use App\Jobs\VideoViewedJob;
-use App\Model\Mongo\UserRelationModel;
-use App\Model\TypeModel;
-use App\Model\UserBuyVideoModel;
-use App\Model\VideoModel;
-use App\Repositories\ConfigRepoistory;
-use App\Repositories\RelationRepository;
-use App\Repositories\UserRepository;
-use App\Repositories\Utils\M3u8CacheRepository;
-use App\Repositories\VideoRepository;
-use Carbon\Carbon;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Api\Services\VideoService;
-use Psr\SimpleCache\CacheInterface;
-class VideoController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 视频列表
-     *
-     * @param VideoService $videoService
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return void
-     */
-    public function list(VideoService $videoService, ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['category_id' => 'required|int', 'page' => 'nullable|int', 'page_size' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($page);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $videoService = make(VideoService::class);
-        $arrAds = $videoService->getAdList(AdConstrant::VIDEO_LIST);
-        $adStep = 1;
-        $configRepo = make(ConfigRepoistory::class);
-        $stepDelimiter = intval($configRepo->get('ad_delimiter_num', 'sys', 10));
-        // 间隔视频几个出现视频.
-        $videoRepo = make(VideoRepository::class);
-        $columns = ['id', 'title', 'cover', 'like', 'uid', 'coins', 'pay_type', 'comment', 'watch', 'resolution', 'duration'];
-        $arrData = $result = VideoModel::query()->with(['type:type.id as type_id,type.title'])->where(['status' => 1, 'category_id' => $inputData['category_id']])->orderByDesc('online_at')->orderByDesc('created_at')->paginate($pageSize, $columns, 'page', $page)->toArray();
-        $arrData['data'] = [];
-        if (!empty($result['data'])) {
-            foreach ($result['data'] as $k => $v) {
-                $v['cover'] = M3u8CacheRepository::getImageUrl($v['cover']);
-                $arrData['data'][] = ['type' => 'v', 'video' => $v];
-                if ($k != 0 && $adStep % $stepDelimiter == 0 && !empty($arrAds)) {
-                    $tmpArrPlay = $videoRepo->getRandAdFromAds($arrAds);
-                    $tmpArrPlay['cover'] = !empty($tmpArrPlay['cover']) ? M3u8CacheRepository::getImageUrl($tmpArrPlay['cover']) : '';
-                    unset($tmpArrPlay['id']);
-                    $arrData['data'][] = ['type' => 'a', 'video' => $tmpArrPlay];
-                }
-                $adStep++;
-            }
-        }
-        return json_success($arrData);
-    }
-    /**
-     * 首页数据
-     * @return mixed
-     */
-    public function home()
-    {
-        $videoRepo = make(VideoRepository::class);
-        $relationRepo = make(RelationRepository::class);
-        $userCode = $this->getUserId();
-        $userInfo = make(UserRepository::class)->getUserInfoFromCache($userCode);
-        $userType = null;
-        if (isset($userInfo['is_vip']) && $userInfo['is_vip'] == 'n') {
-            $userType = 'no_vip';
-        }
-        $maxPondNum = $videoRepo->getMaxPondNum($userType);
-        if ($maxPondNum <= 0) {
-            // 容错,如果系统里没有任何首页非会员视频
-            $userType = null;
-            $maxPondNum = $videoRepo->getMaxPondNum($userType);
-        }
-        $maxNum = $maxPondNum - 1;
-        if ($maxNum < 0) {
-            $maxNum = 0;
-        }
-        //        $videoRepo->clearHomeVideoGroup($groupStep);  // 本地开发测试,永远清理桶缓存.
-        $groupStep = strval(rand(0, $maxNum));
-        // $cacheKey = VideoConstant::HOME_GROUP_CACHE_KEY_PREFIX . $groupStep;
-        // if ($userType == 'no_vip') {
-        //     $cacheKey = VideoConstant::HOME_NOVIP_GROUP_CACHE_KEY_PREFIX . $groupStep;
-        // }
-        //        $cacheRepo  = make(CacheInterface::class);
-        //        $arrVideos = $cacheRepo->get($cacheKey, []);
-        $arrVideos = $videoRepo->makeOneGroup($groupStep, $userType);
-        if (!empty($arrVideos)) {
-            foreach ($arrVideos as $k => &$v) {
-                if ($v['type'] == 'v') {
-                    $v['video']['mu'] = '';
-                    //                    $v['video']['mu'] = M3u8CacheRepository::getVideoInnerUrl($v['video']['mu'], $userCode, $v['video']['id'], 'video');
-                    $v['video']['cover'] = M3u8CacheRepository::getImageUrl($v['video']['cover']);
-                    if (!empty($v['video']['user'])) {
-                        $v['video']['user']['avatar'] = !empty($v['video']['user']['avatar']) ? M3u8CacheRepository::getImageUrl($v['video']['user']['avatar']) : '';
-                    }
-                    // 优化,前端每个视频单独请求详情.
-                    //                    if (!empty($v['video']['user'])) {
-                    //                        $v['video']['user']['is_focus'] = $relationRepo->userIsFocusOtherUser($this->getUserId(), $v['video']['user']['code']);
-                    //                    }
-                    //                    $v['video']['is_my_like'] = $relationRepo->userIsLikeVideo($userCode, $v['video']['id']);
-                } elseif ($v['type'] == 'a') {
-                    if (!empty($v['video']['cover'])) {
-                        $v['video']['cover'] = M3u8CacheRepository::getImageUrl($v['video']['cover']);
-                    }
-                    if (!empty($v['video']['link'])) {
-                        $v['video']['link'] = M3u8CacheRepository::getLinkUrl($v['video']['link'], ['user_code' => $userCode]);
-                    }
-                    if (!empty($v['video']['play'])) {
-                        $v['video']['play'] = M3u8CacheRepository::getVideoInnerUrl($v['video']['play'], $userCode, $v['video']['id'], 'ad');
-                    }
-                    unset($v['video']['id']);
-                }
-            }
-        }
-        return json_success($arrVideos);
-    }
-    /**
-     * 视频详情
-     * @return mixed
-     */
-    public function info(VideoService $videoService, ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['video_id' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $userCode = $this->getUserId();
-        $result = $videoService->info($inputData['video_id'], $userCode);
-        return json_success($result);
-    }
-    /**
-     * 首页关注视频
-     * @return mixed
-     */
-    public function recommend(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|int', 'page_size' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($page);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $videoService = make(VideoService::class);
-        $arrAds = $videoService->getAdList(AdConstrant::VIDEO_HOME);
-        //        $arrAds = [];
-        $adStep = 1;
-        $configRepo = make(ConfigRepoistory::class);
-        $stepDelimiter = intval($configRepo->get('ad_delimiter_num', 'sys', 10));
-        // 间隔视频几个出现视频.
-        $videoRepo = make(VideoRepository::class);
-        $relationRepo = make(RelationRepository::class);
-        $userCode = $this->getUserId();
-        $columns = ['id', 'title', 'cover', 'like', 'uid', 'coins', 'pay_type', 'mu', 'comment', 'watch', 'resolution', 'duration'];
-        //查找100个关注的code
-        $relation = make(UserRelationModel::class)->db()->find(['from_user_id' => $this->getUserId()], ['limit' => 100]);
-        $arrData = [];
-        $arrUserIds = [];
-        $arrRelation = $relation->toArray();
-        if ($arrRelation) {
-            foreach ($arrRelation as $v) {
-                $arrUserIds[] = $v['to_user_id'];
-            }
-            $arrData = $result = VideoModel::query()->with(['category:type.id as type_id,type.title', 'user'])->whereIn('uid', $arrUserIds)->where(['status' => 1])->orderByDesc('online_at')->orderByDesc('created_at')->paginate($pageSize, $columns, 'page', $page)->toArray();
-            $arrData['data'] = [];
-            if (!empty($result['data'])) {
-                foreach ($result['data'] as $k => $v) {
-                    $v['mu'] = '';
-                    // 列表干掉m3u8地址.
-                    //                    $v['mu'] = M3u8CacheRepository::getVideoInnerUrl($v['mu'], $userCode, $v['id'], 'video');
-                    $v['cover'] = M3u8CacheRepository::getImageUrl($v['cover']);
-                    if (!empty($v['user'])) {
-                        $v['user']['avatar'] = M3u8CacheRepository::getImageUrl($v['user']['avatar']);
-                        //                        $v['user']['is_focus'] = $relationRepo->userIsFocusOtherUser($userCode, $v['user']['code']);
-                    }
-                    //                    $v['is_my_like'] = $relationRepo->userIsLikeVideo($userCode, $v['id']);
-                    if (!empty($v['category'])) {
-                        foreach ($v['category'] as $ck => $t) {
-                            unset($v['category'][$ck]['pivot']);
-                        }
-                    }
-                    $arrData['data'][] = ['type' => 'v', 'video' => $v];
-                    if ($k != 0 && $adStep % $stepDelimiter == 0 && !empty($arrAds)) {
-                        $tmpArrPlay = $videoRepo->getRandAdFromAds($arrAds);
-                        $tmpArrPlay['cover'] = !empty($tmpArrPlay['cover']) ? M3u8CacheRepository::getImageUrl($tmpArrPlay['cover']) : '';
-                        if (!empty($tmpArrPlay['link'])) {
-                            $tmpArrPlay['link'] = M3u8CacheRepository::getLinkUrl($tmpArrPlay['link'], ['user_code' => $userCode]);
-                        }
-                        if (!empty($tmpArrPlay['play'])) {
-                            $tmpArrPlay['play'] = M3u8CacheRepository::getVideoInnerUrl($tmpArrPlay['play'], $userCode, $tmpArrPlay['id'], 'ad');
-                        }
-                        unset($tmpArrPlay['id']);
-                        $arrData['data'][] = ['type' => 'a', 'video' => $tmpArrPlay];
-                    }
-                    $adStep++;
-                }
-            }
-        }
-        return json_success($arrData);
-    }
-    /**
-     * 搜索口味
-     * @return mixed
-     */
-    public function searchTag(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['keywords' => 'required|string|max:64', 'page' => 'nullable|int', 'page_size' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $userCode = $this->getUserId();
-        $defaultPageSize = 10;
-        $page = !empty($inputData['page']) ? intval($inputData['page']) : 1;
-        $pageSize = !empty($inputData['page_size']) ? intval($inputData['page_size']) : $defaultPageSize;
-        if ($pageSize > 100) {
-            return json_fail('参数错误');
-        }
-        $page = format_page($page);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $columns = ['id', 'title', 'cover', 'description'];
-        $data = TypeModel::query()->withCount('video')->where('title', 'like', '%' . $inputData['keywords'] . '%')->paginate($pageSize, $columns, 'page', $page);
-        $data = $data->toArray();
-        if (!empty($data['data'])) {
-            foreach ($data['data'] as &$v) {
-                $v['cover'] = M3u8CacheRepository::getImageUrl($v['cover']);
-                unset($v['created_at'], $v['updated_at']);
-            }
-        }
-        // 异步记录搜索记录.
-        $jobParams = ['event_name' => 'tag', 'user_code' => $userCode, 'keywords' => data_get($inputData, 'keywords', ''), 'module' => 'video'];
-        dispatch_job(new RecordSearchJob($jobParams));
-        return json_success($data);
-    }
-    /**
-     * 搜索关键词推荐
-     * @return mixed
-     */
-    public function searchTagHot()
-    {
-        $data = make(CacheInterface::class)->remember('hot_tags', 60 * 60, function () {
-            $arrData = [];
-            $result = TypeModel::query()->where(['is_hot' => 1, 'status' => 1])->withCount('upvideo')->orderByDesc('sort')->take(10)->get(['id', 'title', 'cover']);
-            //                $result = TypeModel::query()
-            //                    ->select(['id','title', 'cover'])
-            //                    ->where('status', 1)
-            //                    ->withCount('video')
-            //                    ->withCount('upvideo')
-            //                    ->orderByDesc('sort')
-            //                    ->get();
-            if ($result->count() > 0) {
-                $result = $result->toArray();
-                foreach ($result as $k => $v) {
-                    $arrData[] = ['id' => $v['id'], 'title' => $v['title'], 'cover' => M3u8CacheRepository::getImageUrl($v['cover']), 'video_count' => !empty($v['upvideo_count']) ? intval($v['upvideo_count']) : 0];
-                }
-            }
-            return $arrData;
-        });
-        return json_success($data);
-    }
-    /**
-     * 搜索视频
-     * @return mixed
-     */
-    public function searchVideo(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['keywords' => 'required|string|max:64', 'page' => 'nullable|int', 'page_size' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($page);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $videoService = make(VideoService::class);
-        //        $arrAds = $videoService->getAdList(AdConstrant::VIDEO_HOME);
-        $arrAds = [];
-        $adStep = 1;
-        $configRepo = make(ConfigRepoistory::class);
-        $stepDelimiter = intval($configRepo->get('ad_delimiter_num', 'sys', 10));
-        // 间隔视频几个出现视频.
-        $cacheRepo = make(CacheInterface::class);
-        $cacheTimes = 2 * 60 * 60;
-        $cacheKey = 'search:video_pages_' . $pageSize . ':' . $page . '_' . data_get($inputData, 'keywords', '');
-        $videoRepo = make(VideoRepository::class);
-        $relationRepo = make(RelationRepository::class);
-        $userCode = $this->getUserId();
-        $cacheData = $cacheRepo->get($cacheKey, []);
-        $arrData = [];
-        if (empty($cacheData)) {
-            $columns = ['id', 'title', 'cover', 'like', 'uid', 'coins', 'pay_type', 'comment', 'mu', 'watch', 'resolution', 'duration'];
-            $ret = VideoModel::query()->with(['category:type.id as type_id,type.title', 'user'])->where('status', 1)->where('title', 'like', '%' . $inputData['keywords'] . '%')->orderByDesc('online_at')->orderByDesc('created_at')->paginate($pageSize, $columns, 'page', $page);
-            if ($ret->isNotEmpty()) {
-                $result = $ret->toArray();
-                if (!empty($result['data'])) {
-                    $arrData = $result;
-                    $cacheRepo->set($cacheKey, $arrData, $cacheTimes);
-                }
-            }
-        } else {
-            $arrData = $cacheData;
-        }
-        $arrData['data'] = [];
-        if (!empty($cacheData['data'])) {
-            foreach ($cacheData['data'] as $k => $v) {
-                $v['mu'] = '';
-                // 列表干掉m3u8地址.
-                //                $v['mu'] = M3u8CacheRepository::getVideoInnerUrl($v['mu'], $userCode, $v['id'], 'video');
-                $v['cover'] = M3u8CacheRepository::getImageUrl($v['cover']);
-                if (!empty($v['user'])) {
-                    $v['user']['avatar'] = M3u8CacheRepository::getImageUrl($v['user']['avatar']);
-                    //                    $v['user']['is_focus'] = $relationRepo->userIsFocusOtherUser($userCode, $v['user']['code']);
-                }
-                //                $v['is_my_like'] = $relationRepo->userIsLikeVideo($userCode, $v['id']);
-                if (!empty($v['category'])) {
-                    foreach ($v['category'] as $ck => $t) {
-                        unset($v['category'][$ck]['pivot']);
-                    }
-                }
-                $arrData['data'][] = ['type' => 'v', 'video' => $v];
-                if ($k != 0 && $adStep % $stepDelimiter == 0 && !empty($arrAds)) {
-                    $tmpArrPlay = $videoRepo->getRandAdFromAds($arrAds);
-                    $tmpArrPlay['cover'] = !empty($tmpArrPlay['cover']) ? M3u8CacheRepository::getImageUrl($tmpArrPlay['cover']) : '';
-                    if (!empty($tmpArrPlay['play'])) {
-                        $tmpArrPlay['play'] = M3u8CacheRepository::getVideoInnerUrl($tmpArrPlay['play'], $userCode, $tmpArrPlay['id'], 'ad');
-                    }
-                    unset($tmpArrPlay['id']);
-                    $arrData['data'][] = ['type' => 'a', 'video' => $tmpArrPlay];
-                }
-                $adStep++;
-            }
-        }
-        // 异步记录搜索记录.
-        $playerTypeName = 'short';
-        $jobParams = ['event_name' => 'video_' . $playerTypeName, 'user_code' => $userCode, 'keywords' => data_get($inputData, 'keywords', ''), 'module' => 'video'];
-        dispatch_job(new RecordSearchJob($jobParams));
-        return json_success($arrData);
-    }
-    /**
-     * 搜索视频
-     * @return mixed
-     */
-    public function searchHot(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['keywords' => 'required|string', 'page' => 'nullable|int', 'page_size' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($page);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $relationRepo = make(RelationRepository::class);
-        $cacheRepo = make(CacheInterface::class);
-        $cacheTimes = 2 * 60 * 60;
-        $cacheKey = 'search:video_pages_' . $pageSize . ':' . $page . '_' . data_get($inputData, 'keywords', '');
-        $userCode = $this->getUserId();
-        $cacheData = $cacheRepo->get($cacheKey, []);
-        $result = [];
-        if (empty($cacheData)) {
-            $columns = ['id', 'title', 'cover', 'like', 'uid', 'coins', 'pay_type', 'mu', 'comment', 'watch', 'resolution', 'duration'];
-            $ret = VideoModel::query()->select()->with(['category:type.id as type_id,type.title', 'user'])->where('title', 'like', '%' . $inputData['keywords'] . '%')->where('status', 1)->orderByDesc('online_at')->orderByDesc('created_at')->paginate($pageSize, $columns, 'page', $page);
-            if ($ret->isNotEmpty()) {
-                $result = $ret->toArray();
-                $cacheRepo->set($cacheKey, $result, $cacheTimes);
-            }
-        }
-        if (!empty($result['data'])) {
-            foreach ($result['data'] as $k => $v) {
-                $v['mu'] = '';
-                // 列表干掉m3u8地址.
-                //                $v['mu'] = M3u8CacheRepository::getVideoInnerUrl($v['mu'], $userCode, $v['id'], 'video');
-                $v['cover'] = M3u8CacheRepository::getImageUrl($v['cover']);
-                if (!empty($result[$k]['user'])) {
-                    $v['user']['avatar'] = M3u8CacheRepository::getImageUrl($v['user']['avatar']);
-                    //                    $v['user']['is_focus'] = $relationRepo->userIsFocusOtherUser($userCode, $v['user']['code']);
-                }
-                //                $v['is_my_like'] = $relationRepo->userIsLikeVideo($userCode, $v['id']);
-                if (!empty($v['category'])) {
-                    foreach ($v['category'] as $ck => $t) {
-                        unset($v['category'][$ck]['pivot']);
-                    }
-                }
-            }
-        }
-        // 异步记录搜索记录.
-        $playerTypeName = 'short';
-        $jobParams = ['event_name' => 'video_' . $playerTypeName, 'user_code' => $userCode, 'keywords' => data_get($inputData, 'keywords', ''), 'module' => 'video'];
-        dispatch_job(new RecordSearchJob($jobParams));
-        return json_success($result);
-    }
-    /**
-     * 搜索视频推荐
-     * @return mixed
-     */
-    public function searchVideoHot()
-    {
-        $userCode = $this->getUserId();
-        $relationRepo = make(RelationRepository::class);
-        $result = make(CacheInterface::class)->remember('hot_video', 60 * 60, function () use($relationRepo) {
-            $columns = ['id', 'title', 'cover', 'like', 'uid', 'coins', 'pay_type', 'mu', 'comment', 'watch', 'resolution', 'duration'];
-            $arrData = [];
-            $result = VideoModel::query()->with(['category:type.id as type_id,type.title', 'user'])->where('status', 1)->orderByDesc('like')->limit(200)->get($columns)->toArray();
-            foreach ($result as $k => $v) {
-                //                    $result[$k]['mu'] = M3u8CacheRepository::getVideoUrl($result[$k]['mu']);
-                //                    $v['is_my_like'] = false;
-                if (!empty($v['category'])) {
-                    foreach ($v['category'] as $ck => $t) {
-                        unset($v['category'][$ck]['pivot']);
-                    }
-                }
-                $arrData[$k] = ['type' => 'v', 'video' => $v];
-            }
-            unset($result);
-            return $arrData;
-        });
-        if (!empty($result)) {
-            foreach ($result as &$v) {
-                if ($v['type'] == 'v') {
-                    $v['video']['mu'] = '';
-                    // 列表干掉m3u8地址.
-                    $v['video']['cover'] = M3u8CacheRepository::getImageUrl($v['video']['cover']);
-                    if (!empty($v['video']['user'])) {
-                        $v['video']['user']['avatar'] = M3u8CacheRepository::getImageUrl($v['video']['user']['avatar']);
-                        //                        $v['user']['is_focus'] = false;
-                    }
-                    //                    $v['video']['mu'] = M3u8CacheRepository::getVideoInnerUrl($v['video']['mu'], $userCode, $v['video']['id'], 'video');
-                    //                    if (!empty($v['video']['user'])) {
-                    //                        $v['video']['user']['is_focus'] = $relationRepo->userIsFocusOtherUser($userCode, $v['video']['user']['code']);
-                    //                    }
-                    //                    $v['video']['is_my_like'] = $relationRepo->userIsLikeVideo($userCode, $v['video']['id']);
-                }
-            }
-        }
-        return json_success($result);
-    }
-    /**
-     * 搜索视频通过标签
-     * @return mixed
-     */
-    public function getVideoByType(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['type_id' => 'required|int', 'page' => 'nullable|int', 'page_size' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($page);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        //        $videoService = make(VideoService::class);
-        //        $arrAds = $videoService->getAdList(AdConstrant::VIDEO_HOME);
-        $arrAds = [];
-        $adStep = 0;
-        $configRepo = make(ConfigRepoistory::class);
-        $stepDelimiter = intval($configRepo->get('ad_delimiter_num', 'sys', 10));
-        // 间隔视频几个出现视频.
-        $videoRepo = make(VideoRepository::class);
-        $relationRepo = make(RelationRepository::class);
-        $userCode = $this->getUserId();
-        $cacheRepo = make(CacheInterface::class);
-        $cacheTimes = 2 * 60 * 60;
-        $cacheKey = 'search:video_by_tag_pages_' . $pageSize . ':' . $page . '_' . data_get($inputData, 'keywords', '');
-        $cacheData = $cacheRepo->get($cacheKey, []);
-        $arrData = $result = [];
-        if (empty($cacheData)) {
-            $columns = ['video.id', 'video.title', 'video.cover', 'video.mu', 'video.like', 'video.uid', 'video.comment', 'video.watch', 'video.resolution', 'video.duration'];
-            $ret = VideoModel::query()->leftJoin('type_video as tv', 'video.id', '=', 'tv.video_id')->with(['category:type.id as type_id,type.title', 'user'])->where('tv.type_id', $inputData['type_id'])->where('video.status', 1)->orderByDesc('video.online_at')->paginate($pageSize, $columns, 'page', $page);
-            if ($ret->isNotEmpty()) {
-                $arrData = $result = $ret->toArray();
-                $cacheRepo->set($cacheKey, $result, $cacheTimes);
-            }
-        } else {
-            $arrData = $cacheData;
-        }
-        $arrData['data'] = [];
-        if (!empty($result['data'])) {
-            foreach ($result['data'] as $k => $v) {
-                $v['mu'] = '';
-                //                $v['mu'] = M3u8CacheRepository::getVideoInnerUrl($v['mu'], $userCode, $v['id'], 'video');
-                $v['cover'] = M3u8CacheRepository::getImageUrl($v['cover']);
-                if (!empty($v['user'])) {
-                    $v['user']['avatar'] = M3u8CacheRepository::getImageUrl($v['user']['avatar']);
-                    //                    $v['user']['is_focus'] = $relationRepo->userIsFocusOtherUser($userCode, $v['user']['code']);
-                }
-                //                $v['is_my_like'] = $relationRepo->userIsLikeVideo($userCode, $v['id']);
-                if (!empty($v['category'])) {
-                    foreach ($v['category'] as $ck => $t) {
-                        unset($v['category'][$ck]['pivot']);
-                    }
-                }
-                $arrData['data'][] = ['type' => 'v', 'video' => $v];
-                if ($k != 0 && $adStep % $stepDelimiter == 0 && !empty($arrAds)) {
-                    $tmpArrPlay = $videoRepo->getRandAdFromAds($arrAds);
-                    $tmpArrPlay['cover'] = !empty($tmpArrPlay['cover']) ? M3u8CacheRepository::getImageUrl($tmpArrPlay['cover']) : '';
-                    if (!empty($tmpArrPlay['link'])) {
-                        $tmpArrPlay['link'] = M3u8CacheRepository::getLinkUrl($tmpArrPlay['link'], ['user_code' => $userCode]);
-                    }
-                    if (!empty($tmpArrPlay['play'])) {
-                        $tmpArrPlay['play'] = M3u8CacheRepository::getVideoInnerUrl($tmpArrPlay['play'], $userCode, $tmpArrPlay['id'], 'ad');
-                    }
-                    unset($tmpArrPlay['id']);
-                    $arrData['data'][] = ['type' => 'a', 'video' => $tmpArrPlay];
-                }
-                $adStep++;
-            }
-        }
-        return json_success($arrData);
-    }
-    /**
-     * 搜索视频通过用户code
-     * @return mixed
-     */
-    public function userVideoList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['code' => 'required|string', 'page' => 'nullable|int', 'page_size' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        $pageSize = intval($pageSize);
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($page);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $userCode = $this->getUserId();
-        $relationRepo = make(RelationRepository::class);
-        $columns = ['id', 'title', 'cover', 'like', 'uid', 'coins', 'pay_type', 'comment', 'mu', 'watch', 'resolution', 'duration'];
-        $result = VideoModel::query()->with(['category:type.id as type_id,type.title', 'user'])->where('uid', $inputData['code'])->where('status', 1)->orderByDesc('online_at')->orderByDesc('created_at')->paginate($pageSize, $columns, 'page', $page)->toArray();
-        if (!empty($result['data'])) {
-            foreach ($result['data'] as $k => &$v) {
-                $v['mu'] = '';
-                // 列表干掉m3u8地址.
-                //                $v['mu'] = M3u8CacheRepository::getVideoInnerUrl($v['mu'], $userCode, $v['id'], 'video');
-                $v['cover'] = M3u8CacheRepository::getImageUrl($v['cover']);
-                if (!empty($v['user'])) {
-                    $v['user']['avatar'] = M3u8CacheRepository::getImageUrl($v['user']['avatar']);
-                    //                    $v['user']['is_focus'] = $relationRepo->userIsFocusOtherUser($userCode, $v['user']['code']);
-                }
-                //                $v['is_my_like'] = $relationRepo->userIsLikeVideo($userCode, $v['id']);
-                if (!empty($v['category'])) {
-                    foreach ($v['category'] as $ck => $t) {
-                        unset($v['category'][$ck]['pivot']);
-                    }
-                }
-            }
-        }
-        return json_success($result);
-    }
-    /**
-     * 推送已观看的视频.
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function pushViewed(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['ids' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $userCode = $this->getUserId();
-        $date = Carbon::now()->toDateString();
-        $arrIds = [];
-        $ids = $inputData['ids'];
-        if (is_string($ids)) {
-            $arrIds = explode(',', $ids);
-            $arrIds = array_unique($arrIds);
-            $arrIds = array_filter($arrIds);
-        } else {
-            $arrIds = $ids;
-        }
-        $count = count($arrIds);
-        if ($count > 100) {
-            return json_fail('too many id');
-        }
-        $userInfo = make(UserRepository::class)->getUserInfoData($userCode);
-        // 今日剩余观影次数
-        $videoSurplus = isset($userInfo['video_surplus']) ? $userInfo['video_surplus'] : 0;
-        $oldSurplus = $videoSurplus;
-        if ($userInfo['is_vip'] == 'y') {
-            $videoSurplus = 999999;
-        } else {
-            // 这里只是初略计算,真实计算考异步job完成后才能计算出来.
-            $videoSurplus = $videoSurplus - $count;
-            $oldSurplus = $videoSurplus;
-        }
-        $isNegativeSurplus = false;
-        // 是否是负数.
-        if ($videoSurplus < 0) {
-            // 容错.
-            $videoSurplus = 0;
-            $isNegativeSurplus = true;
-        }
-        $jobParams = [];
-        if (!empty($arrIds)) {
-            $absSurplus = abs($oldSurplus);
-            foreach ($arrIds as $k => $vid) {
-                if ($isNegativeSurplus && $k == $absSurplus) {
-                    break;
-                }
-                $jobParams[] = ['date' => $date, 'user_id' => $userInfo['id'], 'user_code' => $userInfo['code'], 'video_id' => $vid];
-            }
-            // 异步处理.
-            if (!empty($jobParams)) {
-                dispatch_job(new VideoViewedJob($jobParams));
-            }
-        }
-        $resultData = ['video_surplus' => $videoSurplus];
-        return json_success($resultData);
-    }
-    // 购买视频
-    public function buy()
-    {
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $videoService = make(VideoService::class);
-        $inputData = $this->getJsonData();
-        $rules = ['video_id' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $userCode = $this->getUserId();
-        $videoId = intval(data_get($inputData, 'video_id', 0));
-        $videoObj = $videoService->buyVideo($userCode, $videoId);
-        $playMu = M3u8CacheRepository::getVideoInnerUrl($videoObj->mu, $userCode, $videoObj->id, 'video');
-        $result = ['video_id' => $videoId, 'mu' => $playMu];
-        return json_success($result);
-    }
-    // 我已购买的视频
-    public function myBoughtPages()
-    {
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|int', 'page_size' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($page);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $userCode = $this->getUserId();
-        $user = make(UserRepository::class)->getUserInfoData($userCode);
-        $videoColumns = ['id', 'title', 'cover', 'like', 'uid', 'coins', 'pay_type', 'mu', 'comment', 'watch', 'resolution', 'duration', 'status', 'check'];
-        $strVideoColumns = implode(',', $videoColumns);
-        $lists = UserBuyVideoModel::query()->with(['video:' . $strVideoColumns, 'video.user'])->where(['user_id' => $user['id']])->whereHas('video', function ($q) {
-            $q->where(['status' => 1])->with(['user']);
-        })->orderBy('id', 'DESC')->paginate($pageSize, ['*'], 'page', $page);
-        $lists = $lists->toArray();
-        if (!empty($lists['data'])) {
-            foreach ($lists['data'] as $k => $item) {
-                $v = $item['video'];
-                $v['user'] = $item['video']['user'] ?? null;
-                $v['mu'] = '';
-                // 列表干掉m3u8地址.
-                //                $v['mu'] = M3u8CacheRepository::getVideoInnerUrl($v['mu'], $userCode, $v['id'], 'video');
-                $v['cover'] = M3u8CacheRepository::getImageUrl($v['cover']);
-                if (!empty($v['user'])) {
-                    $v['user']['avatar'] = M3u8CacheRepository::getImageUrl($v['user']['avatar']);
-                    //                    $v['user']['is_focus'] = $relationRepo->userIsFocusOtherUser($userCode, $v['user']['code']);
-                    unset($v['user']['id']);
-                }
-                //                $item['is_my_like'] = $relationRepo->userIsLikeVideo($userCode, $videoObj->id);
-                if (!empty($v['category'])) {
-                    foreach ($v['category'] as $ck => $t) {
-                        unset($v['category'][$ck]['pivot']);
-                    }
-                } else {
-                    $v['category'] = null;
-                }
-                unset($v['status'], $v['check']);
-                $v['buy_at'] = $item['created_at'];
-                // 购买时间.
-                $lists['data'][$k] = $v;
-            }
-        }
-        return json_success($lists);
-    }
-    /**
-     * 最新视频分页.
-     * @return mixed
-     * @throws \Psr\SimpleCache\InvalidArgumentException
-     */
-    public function lastestPages()
-    {
-        $userCode = $this->getUserId();
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|int', 'page_size' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($page);
-        $pageSize = intval($pageSize);
-        $videoRepo = make(VideoRepository::class);
-        // 不让前端随意传,写死10
-        $pageSize = VideoConstant::LASTEST_PAGE_SIZE;
-        $arrData = [];
-        $lists = $videoRepo->lastestPages($page, $pageSize);
-        if (!empty($lists['data'])) {
-            $relationRepo = make(RelationRepository::class);
-            $videoService = make(VideoService::class);
-            $arrAds = $videoService->getAdList(AdConstrant::VIDEO_HOME);
-            $adStep = 1;
-            $configRepo = make(ConfigRepoistory::class);
-            $stepDelimiter = intval($configRepo->get('ad_delimiter_num', 'sys', 10));
-            // 间隔视频几个出现视频.
-            foreach ($lists['data'] as $k => $v) {
-                $v['mu'] = '';
-                // 列表干掉m3u8地址.
-                //                $v['mu'] = M3u8CacheRepository::getVideoInnerUrl($v['mu'], $userCode, $v['id'], 'video');
-                $v['cover'] = M3u8CacheRepository::getImageUrl($v['cover']);
-                if (!empty($v['user'])) {
-                    $v['user']['avatar'] = !empty($v['user']['avatar']) ? M3u8CacheRepository::getImageUrl($v['user']['avatar']) : '';
-                }
-                if (!empty($v['user'])) {
-                    $v['user']['is_focus'] = $relationRepo->userIsFocusOtherUser($userCode, $v['user']['code']);
-                }
-                $v['is_my_like'] = $relationRepo->userIsLikeVideo($userCode, $v['id']);
-                unset($v['status'], $v['check']);
-                $arrData[] = ['type' => 'v', 'video' => $v];
-                if ($k != 0 && $adStep % $stepDelimiter == 0 && !empty($arrAds)) {
-                    $tmpArrPlay = $videoRepo->getRandAdFromAds($arrAds);
-                    $tmpArrPlay['cover'] = !empty($tmpArrPlay['cover']) ? M3u8CacheRepository::getImageUrl($tmpArrPlay['cover']) : '';
-                    if (!empty($tmpArrPlay['link'])) {
-                        $tmpArrPlay['link'] = M3u8CacheRepository::getLinkUrl($tmpArrPlay['link'], ['user_code' => $userCode]);
-                    }
-                    if (!empty($tmpArrPlay['play'])) {
-                        $tmpArrPlay['play'] = M3u8CacheRepository::getVideoInnerUrl($tmpArrPlay['play'], $userCode, $tmpArrPlay['id'], 'ad');
-                    }
-                    unset($tmpArrPlay['id']);
-                    $arrData[] = ['type' => 'a', 'video' => $tmpArrPlay];
-                }
-                $adStep++;
-            }
-            $lists['data'] = $arrData;
-        }
-        return json_success($lists);
-    }
-}

+ 0 - 90
runtime/container/proxy/Modules_Api_Controllers_VipController.proxy.php

@@ -1,90 +0,0 @@
-<?php
-
-/**
- * VIP套餐控制器.
- * @author zhangjunbao <junbaoz1314@gmail.com>
- * @date   2020-01-29 10:13:09
- */
-declare (strict_types=1);
-namespace Modules\Api\Controllers;
-
-use App\Repositories\Service\PaymentService;
-use App\Repositories\VipRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use App\Repositories\UserRepository;
-class VipController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * VIP套餐信息
-     * @param VipRepository $vipRepository
-     * @return mixed
-     */
-    public function lists(VipRepository $vipRepository)
-    {
-        $userInfo = make(UserRepository::class)->getUserInfoFromCache($this->getUserId());
-        $result = ['plans' => [], 'ad' => []];
-        $packages = $vipRepository->getVipPackage($userInfo['coins'], $userInfo['device_type']);
-        $result['plans'] = $packages;
-        return json_success($result);
-    }
-    /**
-     * 购买vip套餐
-     * @param VipRepository $vipRepository
-     * @return mixed
-     */
-    public function buyvip(VipRepository $vipRepository)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['vip_id' => 'required|integer', 'pay_id' => 'required|integer', 'pay_type' => 'required|integer'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $inputData['user_id'] = $this->getUserId();
-        $inputData['order_type'] = 1;
-        if ($inputData['pay_type'] == 4) {
-            $order = $vipRepository->createCoinVipOrder($inputData);
-            if ($order) {
-                return json_success('vip购买成功');
-            }
-        } else {
-            $order = $vipRepository->createVipOrder($inputData);
-            if ($order) {
-                //去生成支付链接
-                $payLink = make(PaymentService::class)->getGateway($order, $inputData['pay_id']);
-                if (!empty($payLink)) {
-                    $data = array('jump' => 'y', 'link' => checkPayUrl($payLink));
-                    return json_success($data);
-                }
-            }
-        }
-        return json_fail('亲,请重试');
-    }
-    /**
-     * VIP结构的jdata独立给android的接口
-     * @return mixed
-     */
-    public function vipJdata()
-    {
-        $vipRepo = make(VipRepository::class);
-        $userInfo = make(UserRepository::class)->getUserInfoData($this->getUserId());
-        $packages = $vipRepo->getVipPackage($userInfo['coins']);
-        $result = [];
-        if (!empty($packages)) {
-            foreach ($packages as $item) {
-                $result[] = $item['jdata'];
-            }
-        }
-        return json_success($result);
-    }
-}

+ 0 - 423
runtime/container/proxy/Modules_Api_Controllers_WithdrawController.proxy.php

@@ -1,423 +0,0 @@
-<?php
-
-namespace Modules\Api\Controllers;
-
-use App\Constants\ChangeLogConstant;
-use App\Jobs\SendTgWithdrawMegJob;
-use App\Model\CoinsLogModel;
-use App\Model\WithdrawalLogModel;
-use App\Model\WithdrawalMethodModel;
-use App\Repositories\ConfigRepoistory;
-use App\Repositories\Service\QueueService;
-use App\Repositories\UserRepository;
-use Carbon\Carbon;
-use Hyperf\DbConnection\Db;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use App\Constants\CommonConstant;
-/**
- *  提现相关
- */
-class WithdrawController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 提现方式列表
-     */
-    public function userWithdrawalMethodList()
-    {
-        return json_success(WithdrawalMethodModel::query()->where('user_uid', $this->getUserId())->get(['id', 'type', 'username', 'account', 'bank']));
-    }
-    /**
-     * 提币网络
-     * @return mixed
-     */
-    public function usdtNetwork()
-    {
-        $configRepo = make(ConfigRepoistory::class);
-        $usdtNet = $configRepo->get('usdt_net', 'sys', '');
-        $arrUsdtNet = !empty($usdtNet) ? explode(',', $usdtNet) : [];
-        return json_success($arrUsdtNet);
-    }
-    /**
-     * 添加提现方式
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function createWithdrawalMethod(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = [
-            'type' => 'required|numeric|between:1,3',
-            // 收款类型 (1USDT,2银行卡,3支付宝)
-            'username' => 'nullable|min:1|max:10',
-            // 姓名
-            'account' => 'required|min:4|max:40',
-            // 账号,卡号,usdt地址
-            'bank' => 'nullable|min:4|max:20',
-        ];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        if ($inputData['type'] === 1) {
-            // USDT
-            if (!$inputData['bank']) {
-                return json_fail('请检查usdt提币方式!');
-            }
-        } elseif ($inputData['type'] === 2) {
-            // 银行卡
-            if (!$inputData['username'] || !$inputData['bank']) {
-                return json_fail('请检查姓名或所属银行!');
-            }
-        } elseif ($inputData['type'] === 3) {
-            // 支付宝
-            if (!$inputData['username']) {
-                return json_fail('请检查姓名!');
-            }
-        }
-        $userId = $this->getUserId();
-        $withdrawalMethod = WithdrawalMethodModel::query();
-        $withdrawalMethodClone = clone $withdrawalMethod;
-        if ($withdrawalMethod->where(['type' => $inputData['type'], 'user_uid' => $userId])->count()) {
-            return json_fail('该提现方式已存在!');
-        }
-        $array = ['user_uid' => $userId, 'type' => $inputData['type'], 'username' => $inputData['username'], 'account' => $inputData['account'], 'bank' => $inputData['bank']];
-        if (!$withdrawalMethodClone->create($array)) {
-            return json_fail('添加失败请联系客服!');
-        }
-        return json_success('添加成功!');
-    }
-    /**
-     * 删除提现方式
-     */
-    public function deleteWithdrawalMethod(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['type' => 'required|numeric|between:1,3'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        // 查询是否有这个方法
-        $userInfo = make(UserRepository::class)->findWhere(['code' => $this->getUserId()])->first();
-        if (!$userInfo) {
-            return json_fail('操作有误!');
-        }
-        $resData = WithdrawalMethodModel::query()->where(['user_uid' => $userInfo->code, 'type' => $inputData['type']])->first();
-        if (!$resData) {
-            return json_fail('提现方式不存在!');
-        }
-        if (!$resData->delete()) {
-            return json_fail('删除失败!');
-        }
-        return json_success($inputData);
-    }
-    /**
-     * 提现记录
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function withdrawalLogList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($page);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        return json_success(WithdrawalLogModel::query()->where([['user_uid', '=', $this->getUserId()], ['type', '!=', 4]])->select('order_number', 'amount', 'type', 'username', 'account', 'bank', 'status', 'remark', 'created_at', 'updated_at')->orderBy('created_at', 'desc')->paginate($pageSize, ['*'], 'page', $page));
-    }
-    /**
-     * 申请提现列表
-     */
-    public function applyDorWithdrawalList()
-    {
-        // 提现列表
-        $dataList = WithdrawalMethodModel::query()->where('user_uid', $this->getUserId())->get(['id', 'type', 'username', 'account', 'bank']);
-        // 查询用户
-        $userInfo = make(UserRepository::class)->findWhere(['code' => $this->getUserId()])->first();
-        if (!$userInfo) {
-            return json_fail('操作有误!');
-        }
-        if ($dataList) {
-            $configRepo = make(ConfigRepoistory::class);
-            $usdtNet = $configRepo->gets(['withdraw_money', 'usdt_conf', 'withdraw_usdt'], 'sys', '');
-            $withdrawMoney = $usdtNet['withdraw_money'];
-            // 最低提现
-            $usdt_conf = $usdtNet['usdt_conf'];
-            // utdt汇率
-            $withdraw_usdt = $usdtNet['withdraw_usdt'];
-            // utdt最低提现
-            foreach ($dataList as &$item) {
-                if ($item->type === 1) {
-                    // usdt提现
-                    $item->low_withdraw = (int) $withdraw_usdt;
-                    //最低提现
-                    $item->withdraw = floor($userInfo->balance / $usdt_conf);
-                    //可提现
-                    $item->exchange = (float) $usdt_conf;
-                    //汇率
-                } else {
-                    $item->low_withdraw = (int) $withdrawMoney;
-                    $item->withdraw = (float) $userInfo->balance;
-                    $item->exchange = 0;
-                }
-            }
-        }
-        $userWithdraw = ['周*雨提现9000元', '白*惠提现8000元', '李*提现10000元', '黄*提现50000元'];
-        $resData = [
-            'user_withdraw_list' => $userWithdraw,
-            'dataList' => $dataList,
-            'balance' => $userInfo->balance,
-            //我的金额
-            'coins' => $userInfo->balance * 10,
-            // 可提现金币
-            'coins_proportion' => 10,
-            // 金币比例
-            'usdt_proportion' => $usdt_conf,
-            // usdt 比例
-            'coins_low_withdraw' => 20,
-            // 最低提现金币
-            'usdt_low_withdraw' => $withdraw_usdt,
-            // usdt 最低提现
-            'money_low_proportion' => $withdrawMoney,
-        ];
-        return json_success($resData);
-    }
-    /**
-     * 申请提现
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function applyDorWithdrawal(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['amount' => 'required|numeric', 'withdrawal_method_id' => 'required|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $userId = $this->getUserId();
-        // 查询提现方式
-        $withdrawalMethodInfo = WithdrawalMethodModel::query()->where(['id' => $inputData['withdrawal_method_id'], 'user_uid' => $userId])->first(['id', 'type', 'username', 'account', 'bank']);
-        if (!$withdrawalMethodInfo) {
-            return json_fail('没有该提现方式!');
-        }
-        $amount = $inputData['amount'];
-        // 查询用户
-        $userInfo = make(UserRepository::class)->findWhere(['code' => $userId])->first();
-        $configRepo = make(ConfigRepoistory::class);
-        $usdtNet = $configRepo->gets(['usdt_conf', 'withdraw_usdt', 'withdraw_money'], 'sys', '');
-        $usdt_conf = floatval($usdtNet['usdt_conf']);
-        //utdt汇率
-        $withdrawUsdtConf = intval($usdtNet['withdraw_usdt']);
-        // ustd最低提现
-        $withdrawConf = intval($usdtNet['withdraw_money']);
-        // ustd最低提现
-        //判断提现的类型
-        if ($withdrawalMethodInfo->type === 1) {
-            // utdt最低提现
-            if ($amount < $withdrawUsdtConf) {
-                return json_fail('最低提现要求' . $withdrawUsdtConf . 'U');
-            }
-            // 可提现U
-            $withdrawalUsdt = floor($userInfo->balance / $usdt_conf);
-            if ($amount > $withdrawalUsdt) {
-                return json_fail('余额不足!');
-            }
-        } else {
-            if ($amount < $withdrawConf) {
-                return json_fail('最低提现要求' . $withdrawConf . '元');
-            }
-            if ($amount > $userInfo->balance) {
-                return json_fail('余额不足!');
-            }
-        }
-        // 金额变动
-        $dataArray = [
-            'order_number' => date('YmdHis') . random_int(10000, 99999),
-            'amount' => $amount,
-            //提现金额
-            'withdrawal_method_id' => $inputData['withdrawal_method_id'],
-            //提现方式id
-            'balance_forward' => $userInfo->balance,
-            //提现前金额
-            'freeze_forward' => $userInfo->freeze,
-            //提现前冻结金额
-            'user_uid' => $userInfo->code,
-            'type' => $withdrawalMethodInfo->type,
-            'username' => $withdrawalMethodInfo->username,
-            'account' => $withdrawalMethodInfo->account,
-            'bank' => $withdrawalMethodInfo->bank,
-            'status' => 1,
-            //1打款中,2已到账,3失败,4冻结
-            'created_at' => Carbon::now()->toDateTimeString(),
-            // 申请时间
-            'updated_at' => Carbon::now()->toDateTimeString(),
-        ];
-        if ($withdrawalMethodInfo->type === 1) {
-            // usdt计算
-            $amount = $amount * $usdt_conf;
-            // usdt转现金
-            $dataArray['usdt_to_amount'] = $amount;
-            //usdt转现金
-            $dataArray['usdt_proportion'] = $usdt_conf;
-        }
-        $dataArray['balance_rear'] = $userInfo->balance - $amount;
-        //提现后金额
-        $dataArray['freeze_rear'] = $userInfo->freeze + $amount;
-        //提现后冻结金额
-        $withdrawalLog = WithdrawalLogModel::query();
-        // 事物执行
-        Db::beginTransaction();
-        try {
-            $userInfo->balance = $userInfo->balance - $amount;
-            // 余额
-            $userInfo->freeze = $userInfo->freeze + $amount;
-            // 冻结余额
-            if (!$userInfo->save()) {
-                Db::rollback();
-                return json_fail('提现失败!请重试 -001');
-            }
-            $res = $withdrawalLog->create($dataArray);
-            if (!$res) {
-                Db::rollback();
-                return json_fail('提现失败!请重试 -002');
-            }
-            Db::commit();
-        } catch (\Exception $exception) {
-            Db::rollback();
-            return json_fail('提现失败!请重试 -003');
-        }
-        dispatch_job(new SendTgWithdrawMegJob('雏姬', $userInfo->code, $userInfo->nick, $withdrawalMethodInfo->type, $inputData['amount'], Carbon::now()->toDateTimeString()));
-        // 帐变记录
-        $changeData = ['user_uid' => $userId, 'currency_type' => ChangeLogConstant::CHANGE_AMOUNT, 'amount' => $amount, 'way' => ChangeLogConstant::WAY_2, 'type' => ChangeLogConstant::TYPE_20];
-        make(QueueService::class)->saveChangeLogJob($changeData);
-        return json_success('申请提现成功!');
-    }
-    /**
-     * 余额转金币列表
-     * @param ValidatorFactoryInterface $validatorFactory
-     */
-    public function BalanceChangeCoinList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($page);
-        $pageSize = intval($pageSize);
-        if ($pageSize <= 0) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        return json_success(WithdrawalLogModel::query()->where([['user_uid', '=', $this->getUserId()], ['type', '=', 4]])->select('amount', 'coins', 'updated_at')->paginate($pageSize, ['*'], 'page', $page));
-    }
-    /**
-     * 余额转金币
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @throws \Exception
-     */
-    public function BalanceChangeCoin(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['amount' => 'required|numeric|min:10'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $amount = $inputData['amount'];
-        $userId = $this->getUserId();
-        // 查询用户
-        $userInfo = make(UserRepository::class)->findWhere(['code' => $userId])->first();
-        if ($userInfo->balance < $amount) {
-            return json_fail('余额不足!');
-        }
-        $coinConf = 10;
-        $coin = $amount * $coinConf;
-        $dataArray = [
-            'order_number' => date('YmdHis') . random_int(10000, 99999),
-            'amount' => $amount,
-            // 兑换的金额
-            'balance_forward' => $userInfo->balance,
-            //提现前金额
-            'balance_rear' => $userInfo->balance - $amount,
-            //提现后金额
-            'withdrawal_method_id' => 0,
-            'coins' => $coin,
-            // 兑换的金币
-            'forward_coins' => $userInfo->coins,
-            // 兑换前
-            'rear_coins' => $userInfo->coins + $coin,
-            // 兑换后
-            'user_uid' => $userInfo->code,
-            'type' => 4,
-            // 4兑换金币
-            'status' => 2,
-            //1打款中,2已到账,3失败,4冻结
-            'coin_proportion' => $coinConf,
-            'created_at' => Carbon::now()->toDateTimeString(),
-            // 申请时间
-            'updated_at' => Carbon::now()->toDateTimeString(),
-        ];
-        $withdrawalLog = WithdrawalLogModel::query();
-        //--记录帐变使用日志
-        $changeData = ['user_uid' => $userInfo->code, 'currency_type' => ChangeLogConstant::CHANGE_COIN, 'amount' => $coin, 'way' => ChangeLogConstant::WAY_1, 'type' => ChangeLogConstant::TYPE_5];
-        $changeBalanceData = ['user_uid' => $userInfo->code, 'currency_type' => ChangeLogConstant::CHANGE_AMOUNT, 'amount' => $amount, 'way' => ChangeLogConstant::WAY_2, 'type' => ChangeLogConstant::TYPE_5];
-        // 事物执行
-        Db::beginTransaction();
-        try {
-            $userInfo->balance = $userInfo->balance - $amount;
-            // 余额
-            $userInfo->coins = $userInfo->coins + $coin;
-            make(UserRepository::class)->delUserCache($userInfo->code);
-            if (!$userInfo->save()) {
-                Db::rollback();
-                return json_fail('兑换失败!请重试 -001');
-            }
-            $res = $withdrawalLog->create($dataArray);
-            if (!$res) {
-                Db::rollback();
-                return json_fail('兑换失败!请重试 -002');
-            }
-            Db::commit();
-            // 帐变记录
-            $queue = make(QueueService::class);
-            $queue->saveChangeLogJob($changeData);
-            // 金币
-            $queue->saveChangeLogJob($changeBalanceData);
-            // 余额
-        } catch (\Exception $exception) {
-            Db::rollback();
-            return json_fail('兑换失败!请重试 -003');
-        }
-        return json_success('兑换成功!');
-    }
-}

+ 0 - 287
runtime/container/proxy/Modules_Manage_Controllers_AdController.proxy.php

@@ -1,287 +0,0 @@
-<?php
-
-/**
- * 广告
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Constants\AdConstrant;
-use App\Model\AdModel;
-use App\Model\AdModel as Model;
-use App\Repositories\ConfigRepoistory;
-use App\Repositories\Service\CommonService;
-use App\Repositories\Service\QueueService;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Psr\SimpleCache\CacheInterface;
-class AdController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 列表
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example param_json_body:   {"handshake":"","data":{"page":1,"page_size":20}}
-     */
-    public function lists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $searchParams = data_get($inputData, 'search', []);
-        $arrWhere = [];
-        $model = AdModel::query();
-        if (!empty($searchParams['position'])) {
-            $arrWhere['position'] = $searchParams['position'];
-        }
-        if (!empty($searchParams['status'])) {
-            $arrWhere['status'] = $searchParams['status'];
-        }
-        if (!empty($searchParams['type'])) {
-            $arrWhere['type'] = $searchParams['type'];
-        }
-        if (!empty($arrWhere)) {
-            $model = $model->where($arrWhere);
-        }
-        if (!empty($searchParams['title'])) {
-            $model = $model->where('title', 'LIKE', '%' . $searchParams['title'] . '%');
-        }
-        $result = $model->orderBy('id', 'DESC')->paginate((int) $inputData['page_size'], ['*'], 'page', (int) $inputData['page']);
-        //处理图片/视频路径
-        //        foreach ($result as $v) {
-        //            $v->cover = make(CommonService::class)->getImageUrl((string)$v->cover, true);  // 图片
-        //            $v->play  = make(CommonService::class)->getVideoUrl((string)$v->play, true);   // 视频
-        //        }
-        return json_success($result);
-    }
-    /**
-     * 新增 / 修改
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function save(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        if (isset($inputData['ad_id'])) {
-            $rules = [
-                'ad_id' => 'int',
-                'position' => 'string',
-                'title' => 'string',
-                'cover' => 'string',
-                //                'start_time'  => 'string',
-                //                'end_time'    => 'string',
-                'sort' => 'int',
-                'url' => 'string',
-                'scheme' => 'string',
-                'type' => 'int',
-                'play' => 'string',
-                'status' => 'nullable|int',
-                'resolution' => 'required',
-            ];
-        } else {
-            $rules = [
-                'ad_id' => 'int',
-                'position' => 'required|string',
-                'title' => 'required|string',
-                'cover' => 'required|string',
-                //                'start_time'  => 'string',
-                //                'end_time'    => 'string',
-                'sort' => 'int',
-                'url' => 'string',
-                'scheme' => 'required|string',
-                'type' => 'required|int',
-                'play' => 'string',
-                'status' => 'nullable|int',
-                'resolution' => 'required',
-            ];
-        }
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        if (!isset($inputData['ad_id'])) {
-            if ($inputData['type'] == 2 && !$inputData['play']) {
-                return json_fail('添加视频广告请上传视频');
-            }
-        }
-        $resolution = strtolower(trim(data_get($inputData, 'resolution', '')));
-        $create = [
-            'position' => $inputData['position'] ?? '',
-            'title' => $inputData['title'] ?? '',
-            'cover' => $inputData['cover'] ?? '',
-            //            'start_time'  => $inputData['start_time'] ?? '',
-            //            'end_time'    => $inputData['end_time'] ?? '',
-            'sort' => $inputData['sort'] ?? '',
-            'scheme' => data_get($inputData, 'scheme', ''),
-            'link' => $inputData['url'],
-            'type' => $inputData['type'] ?? '',
-            'play' => $inputData['play'] ?? '',
-            'resolution' => $resolution,
-        ];
-        if (isset($inputData['status'])) {
-            $create['status'] = intval($inputData['status']);
-        }
-        //        $create = action_data($create);
-        if (isset($inputData['ad_id'])) {
-            $oldItem = Model::query()->where('id', $inputData['ad_id'])->first();
-            if (!$oldItem) {
-                return json_fail('广告不存在');
-            }
-            $result = Model::query()->where('id', $inputData['ad_id'])->update($create);
-            $newitem = Model::query()->where('id', $inputData['ad_id'])->first();
-            // 创建管理员日志
-            $logSubject = "修改广告";
-            $logSvalue = $inputData['ad_id'];
-            $logDbData = ['after_items' => [$newitem->toArray()], 'before_items' => [$oldItem->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-        } else {
-            $result = Model::query()->create($create);
-            if (!$result) {
-                return json_fail('创建失败');
-            }
-            // 创建管理员日志
-            $logSubject = "创建广告";
-            $logSvalue = $result->id;
-            $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
-            $this->log($logSubject, $logSvalue, $logDbData);
-        }
-        $this->clearCache();
-        if (isset($inputData['ad_id'])) {
-            $this->clearCacheVideo($inputData['ad_id']);
-        }
-        return json_success($result);
-    }
-    /**
-     * 编辑(标示上架/下架)
-     * @author x.b
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string: {"handshake":"","data":{"ad_id":7,"status":1}}
-     */
-    public function update(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['ad_id' => 'required|int', 'status' => 'required|in:1,2,3,4'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $data = ['id' => $inputData['ad_id'], 'status' => $inputData['status'] ?? ''];
-        $data = action_data($data);
-        $oldItem = Model::query()->where('id', $inputData['ad_id'])->first();
-        if (!$oldItem) {
-            return json_fail('广告不存在');
-        }
-        /*if ($inputData['status'] == 1 && strpos($oldItem->play, '.mp4')) {
-              //状态改为转码中
-              $data['status'] = 2;
-              //转码
-              make(QueueService::class)->addShiftVideoJob(
-                  [
-                      'path'   => $oldItem->play,
-                      'table'  => 'ad',
-                      'id'     => $oldItem->id,
-                      'update' => 'play',
-                  ]
-              );
-          }*/
-        $result = Model::query()->where('id', $inputData['ad_id'])->update($data);
-        $newitem = Model::query()->where('id', $inputData['ad_id'])->first();
-        // 创建管理员日志
-        $logSubject = "修改广告";
-        $logSvalue = $inputData['ad_id'];
-        $logDbData = ['after_items' => [$newitem->toArray()], 'before_items' => [$oldItem->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        $this->clearCache();
-        $this->clearCacheVideo($inputData['ad_id']);
-        return json_success($result);
-    }
-    /**
-     * 详细
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example param_json_body:     {"handshake":"","data":{"ad_id":1}}
-     */
-    public function detail(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['ad_id' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $result = Model::query()->find($inputData['ad_id']);
-        return json_success($result);
-    }
-    /**
-     * 删除
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example param_json_body:     {"handshake":"","data":{"ad_id":5}}
-     */
-    public function delete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['ad_id' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $info = Model::query()->where('id', $inputData['ad_id'])->first();
-        if (!$info) {
-            return json_fail('广告不存在');
-        }
-        $result = Model::query()->where('id', $inputData['ad_id'])->delete();
-        $this->clearCache();
-        $this->clearCacheVideo($inputData['ad_id']);
-        // 创建管理员日志
-        $oldItem = clone $info;
-        $logSubject = "删除广告";
-        $logSvalue = $inputData['ad_id'];
-        $logDbData = ['after_items' => [], 'before_items' => [$oldItem->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result);
-    }
-    public function type()
-    {
-        $ad['position'] = AdConstrant::$position;
-        $ad['type'] = AdConstrant::$type;
-        return json_success($ad);
-    }
-    public function clearCache()
-    {
-        $cacheRepo = make(CacheInterface::class);
-        $arrKeys = [];
-        foreach (AdConstrant::$position as $postionName => $v) {
-            $arrKeys[] = 'ad:' . $postionName;
-        }
-        return $cacheRepo->deleteMultiple($arrKeys);
-    }
-    /**
-     * @param $id
-     * @return bool
-     * @throws \Psr\SimpleCache\InvalidArgumentException
-     */
-    protected function clearCacheVideo($id)
-    {
-        $cacheKey = 'ad:raw:' . $id . ':empty';
-        $cacheRepo = make(CacheInterface::class);
-        return $cacheRepo->delete($cacheKey);
-    }
-}

+ 0 - 166
runtime/container/proxy/Modules_Manage_Controllers_AuthController.proxy.php

@@ -1,166 +0,0 @@
-<?php
-
-/**
- * 管理员认证.
- *
- * @author jim <jim458734573@gmail.com>
- * @date   2020-01-22 20:24:20
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Controller\CoreController;
-use App\Model\ManagerModel;
-use App\Repositories\ManagerLogRepository;
-use App\Repositories\ManagerRepository;
-use App\Repositories\Utils\AccessControllerListsRepository;
-use App\Repositories\Utils\JwtRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Manage\Services\AuthService;
-class AuthController extends CoreController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * Jwt受众.
-     *
-     * @var string
-     */
-    private $jwtAud = 'manage-users';
-    /**
-     * 属性描述.
-     *
-     * @var ManagerLogRepository
-     */
-    protected $logRepo = null;
-    /**
-     * 管理员登陆.
-     * @param  ValidatorFactoryInterface  $validatorFactory
-     * @param  ManagerRepository  $managerRepository
-     * @param  AuthService  $authService
-     * @return mixed
-     * @throws \Psr\SimpleCache\InvalidArgumentException
-     */
-    public function login(ValidatorFactoryInterface $validatorFactory, ManagerRepository $managerRepository, AuthService $authService)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['account' => 'required|max:120', 'password' => 'required|max:64', 'verify' => 'nullable|max:12'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        // 查询字段.
-        $columns = ['id', 'manager_id', 'username', 'nick', 'role_id', 'password', 'salt', 'locked_at'];
-        // 条件.
-        $conditions = ['username' => $inputData['account']];
-        $managers = make(ManagerRepository::class)->findWhere($conditions, $columns);
-        // 先判断是否存在用户.
-        if (!$managers->count()) {
-            $logSubject = '后台登陆获取token失败;原因:无此账号;入参:account[' . $inputData['account'] . '];密码:[' . pass_encode($inputData['password']) . ']';
-            $logSvalue = '';
-            $logDbData = [];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            // 给一个不容易分析的错误信息给前台.
-            return json_fail('账号或者密码错误.');
-        }
-        // 取第一个用户.
-        $manager = $managers->first();
-        $md5password = make(ManagerRepository::class)->generatePassword($inputData['password'], $manager->salt);
-        var_dump($md5password);
-        if ($manager->password !== $md5password) {
-            $logSubject = '后台登陆获取token失败;原因:密码错误;入参:account[' . $inputData['account'] . '];密码:[' . pass_encode($inputData['password']) . ']';
-            $logSvalue = '';
-            $logDbData = [];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return json_fail('账号或者密码错误.');
-        }
-        if (!empty($manager->locked_at)) {
-            $logSubject = '后台登陆获取token失败;原因:被锁定;入参:account[' . $inputData['account'] . '];密码:[' . pass_encode($inputData['password']) . ']';
-            $logSvalue = '';
-            $logDbData = [];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return json_fail('您已经被锁定,无法登陆.');
-        }
-        $logSubject = '后台登录成功';
-        $logSvalue = $manager->manager_id;
-        list($module, $action) = $this->getModuleAndAction();
-        $inputs = ['manager_id' => $manager->manager_id, 'username' => $manager->username, 'nick' => $manager->nick, 'subject' => mb_strcut($logSubject, 0, 700), 'module' => $module, 'action' => $action, 'svalue' => !empty($logSvalue) ? $logSvalue : '', 'db_data' => []];
-        $this->getLogRepo()->createOne($inputs);
-        $tokenInfo = $authService->createSingleJwt($manager->manager_id, $manager->role_id);
-        $data = ['token' => $tokenInfo['token'], 'expired_at' => $tokenInfo['expired_at'], 'manager_id' => $manager->manager_id];
-        return json_success($data);
-    }
-    public function logout()
-    {
-    }
-    /**
-     * 刷新Token并返回token.
-     * @param  ValidatorFactoryInterface  $validatorFactory
-     * @param  JwtRepository  $jwtRepository
-     * @param  \Modules\Manage\Services\AuthService  $authService
-     * @return mixed
-     * @throws \Psr\SimpleCache\InvalidArgumentException
-     */
-    public function refreshToken(ValidatorFactoryInterface $validatorFactory, JwtRepository $jwtRepository, AuthService $authService)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['manager_id' => 'required', 'old_token' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $validateResult = $jwtRepository->validateToken($inputData['old_token'], $this->jwtAud);
-        $tokenObj = $validateResult['token_obj'];
-        $manager = new \stdClass();
-        $managerId = $tokenObj->getClaim('manager_id');
-        $roleId = $tokenObj->getClaim('role_id');
-        // 检查入参设备信息是否有效.
-        if ($managerId != $inputData['manager_id']) {
-            $logSubject = '后台登陆刷新token失败;原因:入参manager_id和token中的manager_id不一致;入参:manager_id[' . $inputData['manager_id'] . ']';
-            $logSvalue = '';
-            $logDbData = [];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return json_fail('无效数据匹配.');
-        }
-        if (!$validateResult['is_valid'] && $validateResult['is_expired']) {
-            return json_fail('旧Token无效');
-        }
-        $tokenInfo = $authService->createSingleJwt($managerId, $roleId);
-        $data = ['token' => $tokenInfo['token'], 'expired_at' => $tokenInfo['expired_at']];
-        return json_success($data);
-    }
-    /**
-     * 记录操作日志.
-     * @param string $subject 主题.
-     * @param  string  $svalue 关联数据.
-     * @param  array  $dbData 此数组数据结构一定要是["after_items" => [0, 1, 2], "before_items" => [0, 1, 2]], after_items,before_items 是一个二维码数组.
-     * @return bool
-     */
-    protected function log(string $subject, $svalue = '', $dbData = [])
-    {
-        list($module, $action) = $this->getModuleAndAction();
-        $inputs = ['manager_id' => '', 'username' => '', 'nick' => '匿名', 'subject' => mb_strcut((string) $subject, 0, 700), 'module' => $module, 'action' => $action, 'svalue' => !empty($svalue) ? mb_strcut((string) $svalue, 0, 700) : '', 'db_data' => $dbData];
-        $this->getLogRepo()->createOne($inputs);
-        return true;
-    }
-    /**
-     * 获取日志仓库.
-     * @return ManagerLogRepository|null
-     */
-    protected function getLogRepo()
-    {
-        if (empty($this->logRepo)) {
-            $this->logRepo = make(ManagerLogRepository::class);
-        }
-        return $this->logRepo;
-    }
-}

+ 0 - 107
runtime/container/proxy/Modules_Manage_Controllers_BaseController.proxy.php

@@ -1,107 +0,0 @@
-<?php
-
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Controller\CoreController;
-use App\Model\ManagerModel;
-use App\Repositories\ManagerLogRepository;
-use Hyperf\Utils\Context;
-use Modules\Manage\Services\AuthService;
-class BaseController extends CoreController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    /**
-     * 当前管理员ID.
-     *
-     * @var string
-     */
-    protected $ctManagerId = 'ct:Manage.BaseController.manager_id';
-    /**
-     * 当前管理员信息.
-     *
-     * @var string
-     */
-    protected $ctMnanagerInfo = 'ct:Manage.BaseController.manager_info';
-    /**
-     * 当前管理员角色.
-     *
-     * @var string
-     */
-    protected $ctRoleId = 'ct:Manage.BaseController.role_id';
-    /**
-     * 属性描述.
-     *
-     * @var ManagerLogRepository
-     */
-    protected $logRepo = null;
-    public function __construct()
-    {
-        $this->__handlePropertyHandler(__CLASS__);
-        // 初始化获取jwt管理员信息.
-        $this->initJwtManager();
-    }
-    /**
-     * 初始化获取jwt管理员信息.
-     * @return void
-     */
-    protected function initJwtManager()
-    {
-        $managerInfo = $this->getCurrentManagerInfo();
-        if (!empty($managerInfo)) {
-            Context::set($this->ctMnanagerInfo, $managerInfo);
-            Context::set($this->ctManagerId, $managerInfo['manager_id']);
-            Context::set($this->ctRoleId, $managerInfo['role_id']);
-        }
-    }
-    /**
-     * 记录操作日志.
-     * @param string $subject 主题.
-     * @param  string  $svalue 关联数据.
-     * @param  array  $dbData 此数组数据结构一定要是["after_items" => [0, 1, 2], "before_items" => [0, 1, 2]], after_items,before_items 是一个二维码数组.
-     * @return bool
-     */
-    protected function log(string $subject, $svalue = '', $dbData = [])
-    {
-        $manager = $this->getCurrentManger();
-        list($module, $action) = $this->getModuleAndAction();
-        $inputs = ['manager_id' => !empty($manager->manager_id) ? (string) $manager->manager_id : '', 'username' => '', 'nick' => '', 'subject' => mb_strcut((string) $subject, 0, 700), 'module' => $module, 'action' => $action, 'svalue' => !empty($svalue) ? mb_strcut((string) $svalue, 0, 700) : '', 'db_data' => $dbData];
-        if (!empty($manager)) {
-            $inputs['username'] = $manager->username;
-            $inputs['nick'] = $manager->nick;
-        }
-        $this->getLogRepo()->createOne($inputs);
-        return true;
-    }
-    /**
-     * 获取日志仓库.
-     * @return ManagerLogRepository|null
-     */
-    protected function getLogRepo()
-    {
-        return make(ManagerLogRepository::class);
-    }
-    /**
-     * 获取当前管理员对象信息.
-     * @return \Hyperf\Database\Model\Builder|\Hyperf\Database\Model\Model|object|null
-     */
-    protected function getCurrentManger()
-    {
-        $managerInfo = $this->getCurrentManagerInfo();
-        return ManagerModel::with(['role'])->where('manager_id', $managerInfo['manager_id'])->first();
-    }
-    /**
-     * 获取当前管理员信息.
-     * @return array
-     */
-    protected function getCurrentManagerInfo()
-    {
-        $managerInfo = Context::get($this->ctMnanagerInfo, []);
-        if (empty($managerInfo)) {
-            $authService = new AuthService();
-            $managerInfo = $authService->getManagerInfo();
-        }
-        return $managerInfo;
-    }
-}

+ 0 - 118
runtime/container/proxy/Modules_Manage_Controllers_BulletinController.proxy.php

@@ -1,118 +0,0 @@
-<?php
-
-/**
- * 公告管理
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Model\BulletinModel;
-use Carbon\Carbon;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Psr\SimpleCache\CacheInterface;
-class BulletinController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 首页数据
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function lists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int', 'title' => 'nullable', 'status' => 'nullable|int|in:1,2', 'device' => 'nullable|int|in:1,2,3'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $bulletinModel = BulletinModel::query()->whereNull('deleted_at')->where(function ($quire) use($inputData) {
-            if ($inputData['title']) {
-                $quire->where('title', 'like', '%' . $inputData['title'] . '%');
-            }
-            if ($inputData['status']) {
-                $quire->where('status', $inputData['status']);
-            }
-            if ($inputData['device']) {
-                $quire->where('device', $inputData['device']);
-            }
-        })->orderByDesc('sort')->paginate($inputData['page_size'], ['*'], 'page', $inputData['page']);
-        return json_success($bulletinModel);
-    }
-    /**
-     * 添加
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function create(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['title' => 'required', 'status' => 'required|int|in:1,2', 'sort' => 'required|int', 'device' => 'required|int|in:1,2,3', 'start_time' => 'required|date', 'end_time' => 'required|date|after_or_equal:start_time', 'text' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $bulletinModel = BulletinModel::query()->create($inputData);
-        if (!$bulletinModel) {
-            return json_fail('添加失败请从试!');
-        }
-        $this->setCacheBulletin();
-        return json_success('添加成功!');
-    }
-    /**
-     * 修改
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function update(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|int', 'title' => 'required', 'status' => 'required|int|in:1,2', 'sort' => 'required|int', 'device' => 'required|int|in:1,2,3', 'start_time' => 'required|date', 'end_time' => 'required|date|after_or_equal:start_time', 'text' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $id = $inputData['id'];
-        unset($inputData['id']);
-        $bulletinModel = BulletinModel::query()->where('id', $id)->update($inputData);
-        if (!$bulletinModel) {
-            return json_fail('修改失败请从试!');
-        }
-        $this->setCacheBulletin();
-        return json_success('修改成功!');
-    }
-    public function delete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $bulletinModel = BulletinModel::query()->where('id', $inputData['id'])->update(['deleted_at' => Carbon::now()->toDateTimeString()]);
-        if (!$bulletinModel) {
-            return json_fail('删除失败请从试!');
-        }
-        $this->setCacheBulletin();
-        return json_success('删除成功!');
-    }
-    /**
-     * 重置缓存
-     */
-    public function setCacheBulletin()
-    {
-        $cacheInterface = make(CacheInterface::class);
-        // 安卓的
-        $cacheInterface->delete('bulletin:1');
-        // IOS的
-        $cacheInterface->delete('bulletin:2');
-    }
-}

+ 0 - 177
runtime/container/proxy/Modules_Manage_Controllers_CardController.proxy.php

@@ -1,177 +0,0 @@
-<?php
-
-/**
- * 会员卡相关
- * @author x.b
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Model\VipCardModel as Model;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Psr\SimpleCache\CacheInterface;
-class CardController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 列表
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example param_json_data string:  {"handshake":"","data":{"page":1,"page_size":99,"search":{"status":"","title":""},"order":"id","order_sort":"asc"}}
-     */
-    public function list(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $page = isset($inputData['page']) ? (int) $inputData['page'] : 1;
-        $page_size = isset($inputData['page_size']) ? (int) $inputData['page_size'] : 99;
-        $select = ['*'];
-        $model = Model::query();
-        $order_key = isset($inputData['order']) ? $inputData['order'] : 'id';
-        $order_value = isset($inputData['order_sort']) ? $inputData['order_sort'] : 'asc';
-        if (!$order_key) {
-            $order_key = 'id';
-            //不要信任前端,他可能会传个空字符串过来!
-        }
-        if (!$order_value) {
-            $order_value = 'desc';
-        }
-        $search = isset($inputData['search']) ? $inputData['search'] : array();
-        if ($search) {
-            foreach ($search as $k => $v) {
-                if (!strlen((string) $v)) {
-                    continue;
-                }
-                switch ($k) {
-                    case "title":
-                        $model->where($k, 'like', "{$v}%");
-                        break;
-                    default:
-                        $model->where($k, $v);
-                }
-            }
-        }
-        $result = $model->select($select)->orderBy((string) $order_key, (string) $order_value)->paginate($page_size, ['*'], 'page', $page);
-        return json_success($result);
-    }
-    /**
-     * 会员卡详细
-     * @param yes id int $id 会员卡 如 1
-     * @return mixed
-     * @example param_json_data string: {"handshake":"","data":{"id":1}}
-     */
-    public function detail(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $id = $inputData['id'];
-        $select = ['*'];
-        $model = Model::query();
-        $result = $model->select($select)->where('id', $id)->first();
-        if (!$result) {
-            return json_fail('会员卡不存在');
-        }
-        return json_success($result);
-    }
-    /**
-     * 新增会员卡
-     * @param yes id int $id 会员卡 如 100
-     * @return mixed
-     * @example param_json_data string: {"handshake":"","data":{"title":"测试会员卡","remark":"会员卡备注","day":1,"price":10,"true_price":5,"sort":0,"status":0,"color":"#ff00ff"}}
-     */
-    public function add(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['title' => 'required|max:60', 'day' => 'required|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $title = isset($inputData['title']) ? $inputData['title'] : '';
-        $day = isset($inputData['day']) ? $inputData['day'] : 0;
-        if ($day < 0) {
-            return json_fail('天数不能小于0');
-        }
-        $check = Model::query()->where('title', $title)->first();
-        if ($check) {
-            return json_fail('此会员卡标题已存在,请更换一个标题');
-        }
-        $data = array('title' => $title, 'remark' => isset($inputData['remark']) ? $inputData['remark'] : '', 'day' => $day, 'price' => isset($inputData['price']) ? $inputData['price'] : 0, 'true_price' => isset($inputData['true_price']) ? $inputData['true_price'] : 0, 'sort' => isset($inputData['sort']) ? $inputData['sort'] : 0, 'status' => isset($inputData['status']) ? $inputData['status'] : 0, 'color' => isset($inputData['color']) ? $inputData['color'] : '', 'jdata' => isset($inputData['jdata']) ? $inputData['jdata'] : '', 'mark' => isset($inputData['mark']) ? $inputData['mark'] : '', 'is_super' => isset($inputData['is_super']) ? intval($inputData['is_super']) : 0, 'send_type' => isset($inputData['send_type']) ? intval($inputData['send_type']) : 0, 'send_num' => isset($inputData['send_num']) ? intval($inputData['send_num']) : 0, 'send_remark' => isset($inputData['send_remark']) ? $inputData['send_remark'] : '', 'coins' => $inputData['coins'] ?? 0, 'coin_remark' => $inputData['coin_remark'] ?? '', 'intro' => $inputData['intro'] ?? '');
-        $data = action_data($data);
-        $result = Model::query()->create($data);
-        if (!$result) {
-            return json_fail('创建失败');
-        }
-        $this->clearCache();
-        // 创建管理员日志
-        $logSubject = '添加一个会员卡,名称:' . $data['title'];
-        $logSvalue = $result->id;
-        $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result, '创建成功');
-    }
-    /**
-     * 编辑会员卡
-     * @param yes id int $id 会员卡 如 100
-     * @return mixed
-     * @example param_json_data string: {"handshake":"","data":{"id":4,"title":"测试会员卡","remark":"会员卡备注","day":2,"price":10,"true_price":5,"sort":0,"status":0,"color":"#ffffff"}}
-     */
-    public function update(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|numeric', 'title' => 'required|max:60', 'day' => 'required|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $id = isset($inputData['id']) ? $inputData['id'] : '';
-        $title = isset($inputData['title']) ? $inputData['title'] : '';
-        $day = isset($inputData['day']) ? $inputData['day'] : 0;
-        if ($day < 0) {
-            return json_fail('天数不能小于0');
-        }
-        $card_info = Model::query()->where('id', $id)->first();
-        if (!$card_info) {
-            return json_fail('会员卡不存在');
-        }
-        $check = Model::query()->where('title', $title)->first();
-        if ($check) {
-            if ($check->id != $id) {
-                return json_fail('此会员卡标题已存在,请更换一个标题');
-            }
-        }
-        $data = action_data($inputData);
-        $data['coin_remark'] = $data['coin_remark'] ?? '';
-        $data['send_remark'] = $data['send_remark'] ?? '';
-        $data['mark'] = $data['mark'] ?? '';
-        $data['remark'] = $data['remark'] ?? '';
-        $result = Model::query()->where('id', $id)->update($data);
-        if (!$result) {
-            return json_fail('操作失败');
-        }
-        $this->clearCache();
-        // 创建管理员日志
-        $oldItem = clone $card_info;
-        $newItem = Model::query()->where('id', $id)->first();
-        $logSubject = '修改会员卡,会员卡id为' . $id;
-        $logSvalue = $id;
-        $logDbData = ['after_items' => [$newItem->toArray()], 'before_items' => [$oldItem->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result, '操作成功');
-    }
-    public function clearCache()
-    {
-        return make(CacheInterface::class)->delete('vip_list');
-    }
-}

+ 0 - 182
runtime/container/proxy/Modules_Manage_Controllers_CategoryController.proxy.php

@@ -1,182 +0,0 @@
-<?php
-
-/**
- * 通用分类控制器.
- *
- * @author jim <jim458734573@gmail.com>
- * @date   2020-01-29 10:15:03
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Constants\CommonConstant;
-use App\Model\CategoryModel;
-use App\Repositories\CategoryRepository;
-use App\Repositories\Criterias\CategoryPagesCriteria;
-use App\Repositories\Criterias\OrderLimitCriteria;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Manage\Responses\CommonPagesResponse;
-class CategoryController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    public function lists()
-    {
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'id' => 'nullable|string', 'name' => 'nullable|string', 'alias_name' => 'nullable|string', 'position' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['created_at', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $lists = make(CategoryRepository::class)->pushCriteria(new CategoryPagesCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        return new CommonPagesResponse($lists);
-    }
-    public function create()
-    {
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $inputData = $this->getJsonData();
-        $rules = ['name' => 'required|string|max:120', 'alias_name' => 'required|string|max:120', 'position' => 'nullable|string', 'squad' => 'nullable|int', 'parent_id' => 'nullable|int', 'cover_pic' => 'nullable|string', 't_color' => 'nullable|string', 'show_num' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $checkExists = CategoryModel::query()->where(['alias_name' => $inputData['alias_name']])->exists();
-        if ($checkExists) {
-            return json_fail('别名重复');
-        }
-        $obj = make(CategoryRepository::class)->createOne($inputData);
-        if ($obj) {
-            return json_success(['id' => $obj->id]);
-        } else {
-            return json_fail('添加通用分类失败');
-        }
-    }
-    public function modify(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required', 'name' => 'required|string|max:120', 'alias_name' => 'required|string|max:120', 'position' => 'nullable|string', 'squad' => 'nullable|int', 'parent_id' => 'nullable|int', 'cover_pic' => 'nullable|string', 't_color' => 'nullable|string', 'show_num' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $checkExists = CategoryModel::query()->where('id', '!=', $inputData['id'])->where(['alias_name' => $inputData['alias_name']])->exists();
-        if ($checkExists) {
-            return json_fail('别名重复');
-        }
-        $resultInfo = make(CategoryRepository::class)->updateOne($inputData['id'], $inputData);
-        if ($resultInfo['is_ok']) {
-            $logSubject = '编辑一个通用分类:' . $resultInfo['new']->name;
-            $logSvalue = $inputData['id'];
-            $logDbData = ['after_items' => [$resultInfo['new']->toArray()], 'before_items' => [$resultInfo['old']->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return json_success(['id' => $inputData['id']]);
-        } else {
-            return json_fail('编辑通用分类失败');
-        }
-    }
-    public function delete()
-    {
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $id = data_get($inputData, 'id', '');
-        $resultInfo = make(CategoryRepository::class)->deleteOne($id);
-        if ($resultInfo['is_ok']) {
-            $logSubject = '删除一个通用分类:' . $resultInfo['old']->name;
-            $logSvalue = $id;
-            $logDbData = ['after_items' => [], 'before_items' => []];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return json_success(['id' => $id]);
-        } else {
-            return json_fail('删除通用分类失败');
-        }
-    }
-    public function batch()
-    {
-        $inputData = $this->getJsonData();
-        $operateName = $inputData['operate_name'] ?? '';
-        switch ($operateName) {
-            case 'delete':
-                $itemPks = $inputData['item_pks'] ?? [];
-                if (!empty($itemPks)) {
-                    $resultInfo = make(CategoryRepository::class)->deleteMulti($itemPks);
-                    if ($resultInfo['success_ids']) {
-                        $strPks = implode(',', $resultInfo['success_ids']);
-                        $logSubject = '批量删除多个通用分类';
-                        $logSvalue = $strPks;
-                        $logDbData = ['after_items' => [], 'before_items' => []];
-                        $this->log($logSubject, $logSvalue, $logDbData);
-                    }
-                }
-                $data = ['result' => 'success', 'pks' => $itemPks];
-                return json_success($data);
-                break;
-            case 'push_perfect':
-                $aliasName = $inputData['alias_name'] ?? '';
-                $itemPks = $inputData['item_pks'] ?? [];
-                if (!empty($itemPks) && !empty($aliasName)) {
-                    $resultInfo = make(CategoryRepository::class)->pushPerfectVideo($aliasName, $itemPks);
-                    if ($resultInfo['success_ids']) {
-                        $strPks = implode(',', $resultInfo['success_ids']);
-                        $logSubject = '批量推送视频到精选桶:' . $aliasName;
-                        $logSvalue = $strPks;
-                        $logDbData = ['after_items' => [], 'before_items' => []];
-                        $this->log($logSubject, $logSvalue, $logDbData);
-                    }
-                }
-                $data = ['result' => 'success', 'pks' => $itemPks];
-                return json_success($data);
-                break;
-            case 'pop_perfect':
-                $itemPks = $inputData['item_pks'] ?? [];
-                if (!empty($itemPks)) {
-                    $resultInfo = make(CategoryRepository::class)->popPerfectVideo($itemPks);
-                    if ($resultInfo['success_ids']) {
-                        $strPks = implode(',', $resultInfo['success_ids']);
-                        $logSubject = '批量从桶视频里剔除视频';
-                        $logSvalue = $strPks;
-                        $logDbData = ['after_items' => [], 'before_items' => []];
-                        $this->log($logSubject, $logSvalue, $logDbData);
-                    }
-                }
-                $data = ['result' => 'success', 'pks' => $itemPks];
-                return json_success($data);
-                break;
-            default:
-                break;
-        }
-        return json_fail('未知操作');
-    }
-    /**
-     * @return CommonPagesResponse
-     */
-    public function all()
-    {
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $orders = [['created_at', 'DESC']];
-        $lists = CategoryModel::query()->orderByDesc('squad')->orderByDesc('id')->get();
-        return json_success($lists);
-    }
-}

+ 0 - 178
runtime/container/proxy/Modules_Manage_Controllers_ChannelController.proxy.php

@@ -1,178 +0,0 @@
-<?php
-
-/**
- * 渠道管理 
- * @author xiabian
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Model\ChannelModel as Model;
-use App\Model\ConfigModel;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Psr\SimpleCache\CacheInterface;
-class ChannelController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 列表
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example param_json_data string:  {"handshake":"","data":{"page":1,"page_size":5,"search":{"channel":""}}}
-     */
-    public function lists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $page = isset($inputData['page']) ? (int) $inputData['page'] : 1;
-        $page_size = isset($inputData['page_size']) ? (int) $inputData['page_size'] : 20;
-        $select = ['*'];
-        $model = Model::query();
-        $search = isset($inputData['search']) ? $inputData['search'] : array();
-        if ($search) {
-            foreach ($search as $k => $v) {
-                if (!strlen((string) $v)) {
-                    continue;
-                }
-                switch ($k) {
-                    case "channel":
-                        // 渠道码
-                        $model->where($k, 'like', "{$v}%");
-                        break;
-                    default:
-                        $model->where($k, $v);
-                }
-            }
-        }
-        $result = $model->select($select)->orderBy('id', 'desc')->paginate($page_size, ['*'], 'page', $page);
-        return json_success($result);
-    }
-    /**
-     * 新增
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string:
-     *  {"handshake":"","data":{"channel":"csdemo","remark":"备注","status":0}}
-     */
-    public function add(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['channel' => 'required|string', 'remark' => 'string', 'status' => 'required|in:0,1'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $channel = $inputData['channel'];
-        $info = Model::query()->where('channel', $channel)->first();
-        if ($info) {
-            return json_fail('此渠道码已使用,请更换一个');
-        }
-        $url = self::getShareUrl() . '?channel=' . $channel;
-        $data = ['channel' => $channel, 'remark' => $inputData['remark'] ?? "", 'status' => $inputData['status'], 'url' => $url];
-        $result = Model::query()->create($data);
-        $this->clearCache();
-        // 创建管理员日志
-        $newitem = clone $result;
-        $logSubject = "新增渠道信息,渠道码:{$channel}";
-        $logSvalue = $result->id;
-        $logDbData = ['after_items' => [$newitem->toArray()], 'before_items' => []];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result);
-    }
-    /**
-     * 内用-获取分享地址
-     * @return string
-     */
-    private function getShareUrl()
-    {
-        $r = ConfigModel::query()->where('skey', 'share_url')->first();
-        if (!$r) {
-            return '';
-        } else {
-            return $r->svalue;
-        }
-    }
-    /**
-     * 编辑
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string:    {"handshake":"","data":{"id":1,"channel":"csdemo","remark":"备注2","status":1}}
-     */
-    public function update(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|int', 'channel' => 'required|string', 'remark' => 'string', 'status' => 'required|in:0,1'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $id = $inputData['id'];
-        $channel = $inputData['channel'];
-        $check = Model::query()->where('channel', $channel)->first();
-        if ($check) {
-            if ($check->id != $id) {
-                return json_fail('此渠道码已使用,请更换一个');
-            }
-        }
-        $info = Model::query()->where('id', $id)->first();
-        if (!$info) {
-            return json_fail('渠道信息不存在');
-        }
-        $url = self::getShareUrl() . '?channel=' . $channel;
-        $data = ['channel' => $channel, 'remark' => $inputData['remark'] ?? "", 'status' => $inputData['status'], 'url' => $url];
-        $data = action_data($data);
-        $result = Model::query()->where('id', $inputData['id'])->update($data);
-        $this->clearCache();
-        // 创建管理员日志
-        $olditem = clone $info;
-        $newitem = Model::query()->where('id', $inputData['id'])->first();
-        $logSubject = "修改渠道信息,渠道ID:{$id}";
-        $logSvalue = $olditem->id;
-        $logDbData = ['after_items' => [$newitem->toArray()], 'before_items' => [$olditem->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result);
-    }
-    /**
-     * 删除 (真实删除数据)
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string:    {"handshake":"","data":{"id":1}}
-     */
-    public function delete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $info = Model::query()->where('id', $inputData['id'])->first();
-        if (!$info) {
-            return json_fail('渠道信息不存在');
-        }
-        $result = Model::query()->where('id', $inputData['id'])->delete();
-        if (!$result) {
-            return json_fail('删除失败');
-        }
-        $this->clearCache();
-        // 创建管理员日志
-        $olditem = clone $info;
-        $logSubject = "删除渠道信息";
-        $logSvalue = $olditem->id;
-        $logDbData = ['after_items' => [], 'before_items' => [$olditem->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result);
-    }
-    public function clearCache()
-    {
-        return make(CacheInterface::class)->delete('channel_list');
-    }
-}

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

@@ -1,92 +0,0 @@
-<?php
-
-namespace Modules\Manage\Controllers;
-
-use App\Constants\CommonConstant;
-use App\Model\Mongo\MessageModel;
-use App\Repositories\ShopsRepository;
-use App\Repositories\UserRepository;
-use App\Repositories\Utils\M3u8CacheRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-class ChatController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    public function lists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|integer', 'page_size' => 'required|integer'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page'] ?? 1);
-        $result = make(MessageModel::class)->db()->aggregate([['$match' => ['is_admin' => 2]], ['$group' => ["_id" => ['from_uid' => '$from_uid', 'receive_uid' => '$receive_uid'], 'struct_type' => ['$first' => '$struct_type'], 'receive_uid' => ['$first' => '$receive_uid'], 'from_uid' => ['$first' => '$from_uid'], 'created_at' => ['$last' => '$created_at'], 'from_nick' => ['$first' => '$from_nick'], 'shops_name' => ['$first' => '$shops_name']]], ['$sort' => ["created_at" => -1]], ['$limit' => $pageSize * $page], ['$skip' => ($page - 1) * $pageSize]]);
-        $result = $result->toArray();
-        foreach ($result as &$v) {
-            $v['created_at'] = mongoIsoDateToCarbonTime($v['created_at'])->toDateTimeString();
-        }
-        return json_success($result);
-    }
-    /**
-     * 获取聊天者的信息
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return array|mixed
-     */
-    public function getChatUser(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['from_uid' => 'nullable|string', 'receive_uid' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $userInfo = make(UserRepository::class)->findBy('code', $inputData['from_uid'], ['nick', 'avatar', 'code']);
-        $shopInfo = make(ShopsRepository::class)->findBy('uid', $inputData['receive_uid'], ['title', 'cover', 'uid']);
-        $res['user'] = $userInfo;
-        $res['shops'] = $shopInfo;
-        return json_success($res);
-    }
-    /**
-     * 聊天记录
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function userChatRecord(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['from_uid' => 'nullable|string', 'receive_uid' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $options = ['limit' => 100, 'sort' => ['created_at' => -1]];
-        $where['$or'] = [['from_uid' => $inputData['from_uid'], 'receive_uid' => $inputData['receive_uid']], ['receive_uid' => $inputData['from_uid'], 'from_uid' => $inputData['receive_uid']]];
-        $res = make(MessageModel::class)->db()->find($where, $options)->toArray();
-        foreach ($res as $key => $val) {
-            $content = json_decode($val['content'], true);
-            $res[$key]['message'] = $content['message'];
-            $res[$key]['msg_type'] = $val['struct_type'];
-            $res[$key]['created_at'] = mongoIsoDateToCarbonTime($val['created_at'])->toDateTimeString();
-            $res[$key]['updated_at'] = mongoIsoDateToCarbonTime($val['updated_at'])->toDateTimeString();
-            unset($res[$key]['_id'], $res[$key]['subject'], $res[$key]['receive_type'], $res[$key]['from_type'], $res[$key]['struct_type'], $res[$key]['content']);
-        }
-        return json_success(array_reverse($res));
-    }
-}

+ 0 - 200
runtime/container/proxy/Modules_Manage_Controllers_CoinsController.proxy.php

@@ -1,200 +0,0 @@
-<?php
-
-namespace Modules\Manage\Controllers;
-
-use App\Constants\CommonConstant;
-use App\Model\CoinsLogModel;
-use App\Model\CoinsModel;
-use App\Repositories\CoinsRepository;
-use Carbon\Carbon;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Manage\Responses\CommonSuccessPkResponse;
-class CoinsController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 分页列表
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function lists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|numeric', 'page_size' => 'nullable|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = isset($inputData['page']) ? intval($inputData['page']) : 1;
-        $page = format_page($page);
-        $arrData = [];
-        $lists = CoinsModel::query()->orderBy('sort', 'DESC')->paginate($pageSize, ['*'], 'page', $page);
-        if ($lists->isNotEmpty()) {
-            $arrData = $lists->toArray();
-        }
-        return json_success($arrData);
-    }
-    /**
-     * 详情
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function detail(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $id = data_get($inputData, 'id', '');
-        $arrData = [];
-        $item = CoinsModel::query()->findOrFail($id);
-        if (!empty($item)) {
-            $arrData = $item->toArray();
-        }
-        return json_success($arrData);
-    }
-    /**
-     * 创建或者更新.
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function update(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'nullable|int', 'coins' => 'required|int', 'send_type' => 'required|int', 'send_num' => 'required|int', 'title' => 'required|string|max:255', 'price' => 'required|numeric', 'real_price' => 'required|numeric', 'title_desc' => 'nullable|string|max:255', 'price_desc' => 'nullable|string|max:255', 'sort' => 'required|int', 'type' => 'required|int', 'recommend_desc' => 'nullable|string|max:255', 'status' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $id = data_get($inputData, 'id', '');
-        $fields = $rules;
-        unset($fields['id']);
-        foreach ($fields as $fieldName => $rule) {
-            if (in_array($fieldName, ['coins', 'send_type', 'send_num', 'sort', 'type', 'recommend_desc'])) {
-                $setarr[$fieldName] = intval(data_get($inputData, $fieldName, 0));
-            } else {
-                $setarr[$fieldName] = data_get($inputData, $fieldName, '');
-            }
-        }
-        unset($setarr['status']);
-        if (isset($inputData['status']) && !empty($inputData['status'])) {
-            $setarr['status'] = intval($inputData['status']);
-        }
-        if ($id) {
-            $item = CoinsModel::query()->findOrFail($id);
-            $result = $item->update($setarr);
-        } else {
-            $result = CoinsModel::query()->create($setarr);
-            if ($result) {
-                $id = $result->id;
-            }
-        }
-        if (empty($result)) {
-            return json_fail('保存失败');
-        } else {
-            make(CoinsRepository::class)->delUserCoinsCache();
-            return json_success(['result' => 'success', 'id' => $id]);
-        }
-    }
-    /**
-     * 删除
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|CommonSuccessPkResponse
-     * @throws \Exception
-     */
-    public function delete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $item = CoinsModel::query()->findOrFail($inputData['id']);
-        $result = $item->delete();
-        if ($result) {
-            make(CoinsRepository::class)->delUserCoinsCache();
-            return new CommonSuccessPkResponse($inputData['id']);
-        } else {
-            return json_fail('保存失败');
-        }
-    }
-    /**
-     * 修改状态
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|CommonSuccessPkResponse
-     */
-    public function switchStatus(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|int', 'status' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $operatorName = 'opened';
-        $item = CoinsModel::query()->findOrFail($inputData['id']);
-        if ($item->status == $inputData['status']) {
-            return new CommonSuccessPkResponse($item->id);
-        }
-        if ($inputData['status'] == 2) {
-            $operatorName = 'closed';
-        }
-        $item->status = $inputData['status'];
-        $result = $item->save();
-        if ($result) {
-            make(CoinsRepository::class)->delUserCoinsCache();
-            return json_success(['result' => 'success', 'id' => $inputData['id'], 'operator_name' => $operatorName]);
-        } else {
-            return json_fail('保存失败');
-        }
-    }
-    /**
-     * 金币明细
-     */
-    public function coinsLogs(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int', 'user_code' => 'nullable|string', 'coin_type' => 'nullable|int', 'stime' => 'nullable|date', 'otime' => 'nullable|date'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $userCode = $inputData['user_code'];
-        $coinType = $inputData['coin_type'];
-        $stime = $inputData['stime'];
-        $otime = $inputData['otime'];
-        $result = CoinsLogModel::query()->where(function ($q) use($userCode, $coinType, $stime, $otime) {
-            if ($userCode) {
-                $q->where('user_code', $userCode);
-            }
-            if ($coinType) {
-                $q->where('coin_type', $coinType);
-            }
-            if ($stime && $otime) {
-                $q->whereBetween('created_at', [Carbon::parse($stime)->toDateString(), Carbon::parse($otime)->toDateString()]);
-            }
-        })->orderByDesc('id')->paginate((int) $inputData['page_size'], ['*'], 'page', (int) $inputData['page']);
-        return json_success($result);
-    }
-}

+ 0 - 104
runtime/container/proxy/Modules_Manage_Controllers_CommentController.proxy.php

@@ -1,104 +0,0 @@
-<?php
-
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Model\CommentModel;
-use App\Repositories\CommentRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-/**
- * 评论管理
- */
-class CommentController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 首页数据
-     * @param ValidatorFactoryInterface $validatorFactory
-     */
-    public function lists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['stime' => 'nullable|date', 'otime' => 'nullable|date', 'module' => 'nullable|string', 'like_content' => 'nullable|string', 'digest' => 'nullable|numeric', 'top' => 'nullable|numeric', 'user_uid' => 'nullable', 'page' => 'nullable|numeric', 'page_size' => 'nullable|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $commentModel = make(CommentRepository::class);
-        $commentGroup = clone $commentModel;
-        $module = $commentGroup->getModule();
-        $commentList = make(CommentRepository::class)->getLists($inputData);
-        $data = ['dataList' => $commentList, 'module' => $module];
-        return json_success($data);
-    }
-    /**
-     * 修改状态
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function editType(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['comment_id' => 'required|numeric', 'type' => 'required|string|in:is_digest,is_top', 'val' => 'required|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $res = CommentModel::query()->where('id', $inputData['comment_id'])->update([$inputData['type'] => $inputData['val']]);
-        if (!$res) {
-            return json_fail('修改失败');
-        }
-        return json_success('修改成功');
-    }
-    /**
-     * 删除评论
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function delete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['comment_id' => 'required|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $res = CommentModel::query()->where('id', $inputData['comment_id'])->delete();
-        if (!$res) {
-            return json_fail('修改失败');
-        }
-        return json_success('修改成功');
-    }
-    /**
-     * 批量删除评论
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function deleteLists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['ids' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $ids = $inputData['ids'];
-        $aIds = explode(',', $ids);
-        $res = CommentModel::query()->whereIn('id', $aIds)->delete();
-        if ($res) {
-            return json_success($res);
-        } else {
-            return json_fail('删除失败');
-        }
-    }
-}

+ 0 - 131
runtime/container/proxy/Modules_Manage_Controllers_CreatorController.proxy.php

@@ -1,131 +0,0 @@
-<?php
-
-namespace Modules\Manage\Controllers;
-
-use App\Constants\CommonConstant;
-use App\Repositories\CreatorRepository;
-use App\Repositories\Criterias\CommonLimitCriteria;
-use App\Repositories\Criterias\CommonWithCriteria;
-use App\Repositories\Criterias\CreatorPagesCriteria;
-use App\Repositories\Utils\M3u8CacheRepository;
-use Carbon\Carbon;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-class CreatorController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    public function lists()
-    {
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|int', 'page_size' => 'nullable|int', 'status' => 'nullable|int', 'level' => 'nullable|int', 'user_nick' => 'nullable', 'user_code' => 'nullable', 'user_mobile' => 'nullable'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'] ?? 1;
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 100) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($page);
-        $pageSize = intval($pageSize);
-        $creatorRepo = make(CreatorRepository::class);
-        $params = [];
-        if (isset($inputData['status'])) {
-            $params['status'] = $inputData['status'];
-        }
-        if (isset($inputData['level'])) {
-            $params['level'] = $inputData['level'];
-        }
-        if (!empty($inputData['user_nick'])) {
-            $params['user_nick'] = $inputData['user_nick'];
-        }
-        if (!empty($inputData['user_code'])) {
-            $params['user_code'] = $inputData['user_code'];
-        }
-        if (!empty($inputData['user_mobile'])) {
-            $params['user_mobile'] = $inputData['user_mobile'];
-        }
-        $orderBy = [['id', 'DESC']];
-        $lists = $creatorRepo->pushCriteria(new CreatorPagesCriteria($params))->pushCriteria(new CommonWithCriteria(['user']))->pushCriteria(new CommonLimitCriteria($orderBy))->paginate($pageSize, ['*'], $page);
-        $lists = $lists->toArray();
-        /*if (!empty($lists['data'])) {
-              foreach ($lists['data'] as &$v) {
-                  $v['user']['avatar'] = M3u8CacheRepository::getImageUrl($v['user']['avatar']);
-                  if ($v['user']['gender'] == 3) {
-                      $v['user']['gender'] = 2;
-                  }
-              }
-          }*/
-        return json_success($lists);
-    }
-    /**
-     * 审核状态
-     * @return mixed
-     */
-    public function changeStatus()
-    {
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|int', 'target_status' => 'required|int', 'reject_reason' => 'nullable'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $creatorRepo = make(CreatorRepository::class);
-        $targetStatus = intval(data_get($inputData, 'target_status', 3));
-        $obj = $creatorRepo->find($inputData['id']);
-        if (empty($obj)) {
-            return json_fail('对象不存在');
-        }
-        $rejectReason = data_get($inputData, 'reject_reason', '');
-        if ($obj->status == $targetStatus) {
-            return json_fail('前后状态无变化');
-        }
-        $msgSubjct = '恭喜您,原创者审核通过.';
-        $msgContent = '您现在可以马上上传时视频挣钱了.有收入可以随时提现.';
-        $obj->reject_reason = '';
-        $obj->reject_at = null;
-        if ($targetStatus == 2) {
-            $obj->reject_reason = $rejectReason;
-            $obj->reject_at = Carbon::now()->toDateTimeString();
-            $msgSubjct = '您申请原创者,未通过审核';
-            $msgContent = '拒绝原因:' . $rejectReason . ', 若有异议,请联系客服!';
-        }
-        $obj->status = $targetStatus;
-        $saveStatus = $obj->save();
-        if ($saveStatus) {
-            $msgSetarr = ['subject' => $msgSubjct, 'struct_type' => 'text', 'receive_uid' => $obj->user_uid, 'receive_type' => 'user', 'from_uid' => '', 'from_type' => 'sys', 'content' => $msgContent];
-            // TODO 发送站内系统消息, 依赖雏姬的分支 jim_sys_message
-        }
-        return json_success(['result' => 'success']);
-    }
-    public function detail()
-    {
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $inputData = $this->getJsonData();
-        $rules = ['user_code' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $creatorRepo = make(CreatorRepository::class);
-        $obj = $creatorRepo->detail($inputData['user_code']);
-        if (empty($obj)) {
-            return json_fail('对象不存在');
-        }
-        $result = $obj->toArray();
-        return json_success($result);
-    }
-}

+ 0 - 145
runtime/container/proxy/Modules_Manage_Controllers_FanGroupController.proxy.php

@@ -1,145 +0,0 @@
-<?php
-
-namespace Modules\Manage\Controllers;
-
-use App\Constants\CommonConstant;
-use App\Repositories\Criterias\FanGroupCriteria;
-use App\Repositories\Criterias\OrderLimitCriteria;
-use App\Repositories\FanGroupRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Manage\Responses\PaymentSuccessUidResponse;
-class FanGroupController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    public function lists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|numeric', 'page_size' => 'required|numeric', 'status' => 'nullable|in:1,2', 'title' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = isset($inputData['page']) ? intval($inputData['page']) : 1;
-        $page = format_page($page);
-        $orders = [['created_at', 'DESC']];
-        $res = make(FanGroupRepository::class)->pushCriteria(new FanGroupCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        return json_success($res);
-    }
-    /**
-     * 创建群组
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse
-     */
-    public function create(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['log' => 'required|string', 'title' => 'required|string', 'status' => 'required|in:1,2', 'link' => 'required|string', 'sort' => 'required|integer'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $inserData = ['log' => $inputData['log'], 'title' => $inputData['title'], 'status' => $inputData['status'], 'link' => $inputData['link'], 'sort' => $inputData['sort']];
-        $result = make(FanGroupRepository::class)->create($inserData);
-        if (!$result) {
-            return json_fail('创建失败');
-        } else {
-            $logSubject = '添加一个支付通道,通道名字:' . $inputData['title'];
-            $logSvalue = $result->id;
-            $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new PaymentSuccessUidResponse($result->id);
-        }
-    }
-    /**
-     * 修改群组
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse
-     */
-    public function modify(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required', 'log' => 'nullable|string', 'title' => 'nullable|string', 'status' => 'nullable|in:1,2', 'link' => 'nullable|string', 'sort' => 'nullable|integer'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $fanGroupInfo = make(FanGroupRepository::class)->findBy('id', $inputData['id']);
-        if (!$fanGroupInfo) {
-            return json_fail('修改的粉丝群组不存在!');
-        }
-        $oldFanGroupInfo = clone $fanGroupInfo;
-        if (!empty($inputData['log'])) {
-            $fanGroupInfo->log = $inputData['log'];
-        }
-        if (!empty($inputData['title'])) {
-            $fanGroupInfo->title = $inputData['title'];
-        }
-        if (!empty($inputData['status'])) {
-            $fanGroupInfo->status = $inputData['status'];
-        }
-        if (!empty($inputData['link'])) {
-            $fanGroupInfo->link = $inputData['link'];
-        }
-        if (!empty($inputData['sort'])) {
-            $fanGroupInfo->sort = $inputData['sort'];
-        }
-        $result = $fanGroupInfo->save();
-        if (!$result) {
-            return json_fail('修改失败');
-        } else {
-            $logSubject = '修改一个粉丝群组:' . $fanGroupInfo->name;
-            $logSvalue = $fanGroupInfo->id;
-            $logDbData = ['after_items' => [$fanGroupInfo->toArray()], 'before_items' => [$oldFanGroupInfo->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new PaymentSuccessUidResponse($fanGroupInfo->id);
-        }
-    }
-    /**
-     * 删除群组
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse
-     */
-    public function delete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $fanGroupInfo = make(FanGroupRepository::class)->findBy('id', $inputData['id']);
-        if (!$fanGroupInfo) {
-            return json_fail('删除的粉丝群组不存在!');
-        }
-        $oldFanGroupInfo = clone $fanGroupInfo;
-        $result = $fanGroupInfo->delete();
-        if (!$result) {
-            return json_fail('删除失败');
-        } else {
-            $logSubject = '删除一个粉丝群组:' . $fanGroupInfo->name;
-            $logSvalue = $fanGroupInfo->manager_id;
-            $logDbData = ['after_items' => [], 'before_items' => [$oldFanGroupInfo->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new PaymentSuccessUidResponse($inputData->id);
-        }
-    }
-}

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

@@ -1,93 +0,0 @@
-<?php
-
-/**
- * 用户反馈控制器
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Model\FeedbackModel;
-use App\Repositories\FeedbackRepository;
-use Carbon\Carbon;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-class FeedbackController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 反馈列表
-     * @param FeedbackRepository $feedbackRepository
-     * @return mixed
-     */
-    public function list(ValidatorFactoryInterface $validatorFactory, FeedbackRepository $feedbackRepository)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['name' => 'string', 'code' => 'string', 'content' => 'string', 'status' => 'numeric', 'page' => 'required|numeric', 'page_size' => 'required|numeric', 'user_id' => 'string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        return json_success($feedbackRepository->getAdminList($inputData));
-    }
-    /**
-     * 对话列表
-     * @param FeedbackRepository $feedbackRepository
-     * @return mixed
-     */
-    public function talkList(ValidatorFactoryInterface $validatorFactory, FeedbackRepository $feedbackRepository)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['code' => 'required|string', 'page' => 'required|numeric', 'page_size' => 'required|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $result = $feedbackRepository->getTalkList($inputData['code'], (int) $inputData['page'], (int) $inputData['page_size']);
-        return json_success($result);
-    }
-    /**
-     * 回复反馈
-     */
-    public function reply(ValidatorFactoryInterface $validatorFactory, FeedbackRepository $feedbackRepository)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'required|string', 'type' => 'required|numeric', 'content' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $item = FeedbackModel::query()->where('uid', $inputData['uid'])->first();
-        if (empty($item)) {
-            return json_fail('数据不存在!');
-        }
-        $managerInfo = $this->getCurrentManagerInfo();
-        $inputData['rid'] = $managerInfo['manager_id'];
-        $create = $feedbackRepository->feedbackReply($inputData);
-        return json_success($create);
-    }
-    /**
-     * 标记状态
-     */
-    public function status(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['code' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $item = FeedbackModel::query()->where('uid', $inputData['code'])->update(['status' => 1]);
-        return json_success($item);
-    }
-}

+ 0 - 411
runtime/container/proxy/Modules_Manage_Controllers_FinanceController.proxy.php

@@ -1,411 +0,0 @@
-<?php
-
-namespace Modules\Manage\Controllers;
-
-use App\Constants\CommonConstant;
-use App\Model\PaymentAttrModel;
-use App\Model\PaymentModel;
-use App\Repositories\Criterias\OrderLimitCriteria;
-use App\Repositories\Criterias\PaymentAttrCriteria;
-use App\Repositories\Criterias\PaymentAttrLimitCriteria;
-use App\Repositories\Criterias\PaymentLimitCriteria;
-use App\Repositories\Criterias\PaymentTypeLimitCriteria;
-use App\Repositories\OrderRepository;
-use App\Repositories\PaymentAttrRepository;
-use App\Repositories\PaymentTypeRepository;
-use App\Repositories\Service\PaymentService;
-use App\Repositories\VipRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Manage\Responses\CommonPagesResponse;
-use Modules\Manage\Responses\CommonSuccessPkResponse;
-use Modules\Manage\Responses\PaymentSuccessUidResponse;
-class FinanceController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 支付通道列表
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @param OrderRepository $orderRepository
-     * @return mixed|CommonPagesResponse
-     */
-    public function paymentList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'status' => 'nullable|in:1,2', 'name' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['created_at', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page'] ?? 1);
-        // 注意,单例分页一定要克隆一个(保证前面没用使用到paginate);
-        $field = ['id', 'name', 'pay_code', 'status', 'created_at', 'updated_at', 'partner_id'];
-        $payment = make(OrderRepository::class)->pushCriteria(new PaymentLimitCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page);
-        return new CommonPagesResponse($payment);
-    }
-    /**
-     * 支付通道添加
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse
-     */
-    public function paymentAdd(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['name' => 'required|string', 'pay_code' => 'required|string', 'partner_id' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $setarr = ['name' => $inputData['name'], 'status' => 1, 'pay_code' => $inputData['pay_code'], 'partner_id' => $inputData['partner_id']];
-        $result = make(OrderRepository::class)->create($setarr);
-        if (!$result) {
-            return json_fail('创建失败');
-        } else {
-            $logSubject = '添加一个支付通道,通道名字:' . $inputData['name'];
-            $logSvalue = $result->id;
-            $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new PaymentSuccessUidResponse($result->manager_id);
-        }
-    }
-    /**
-     * 支付类型
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function paymentAttr(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'pay_type' => 'nullable|integer', 'status' => 'nullable|in:1,2', 'pay_code' => 'nullable', 'type_name' => 'nullable|string'];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page'] ?? 1);
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['created_at', 'DESC']];
-        $paymentAttr = make(PaymentAttrRepository::class)->pushCriteria(new PaymentAttrCriteria($inputData))->pushCriteria(new PaymentAttrLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        return new CommonPagesResponse($paymentAttr);
-    }
-    /**
-     * 查询所有的
-     * @return mixed
-     */
-    public function paymentAttrAll()
-    {
-        return json_success(PaymentAttrModel::query()->select('uid', 'type_name', 'pay_code')->get()->groupBy('pay_code'));
-    }
-    /**
-     * 添加
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function createPaymentAttr(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['pay_code' => 'required', 'type_name' => 'required', 'code' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        // 查询是否有通道
-        $paymentModel = make(PaymentModel::class)->where('uid', $inputData['pay_code'])->first();
-        if (!$paymentModel) {
-            return json_fail('该支付通道不存在!');
-        }
-        $data = $inputData;
-        $data['pay_code'] = $paymentModel->uid;
-        $res = PaymentAttrModel::query()->create($data);
-        if (!$res) {
-            return json_fail('创建失败');
-        }
-        return json_success('创建成功');
-    }
-    /**
-     * 修改
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function updatePaymentAttr(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'required', 'pay_code' => 'nullable', 'type_name' => 'nullable', 'code' => 'nullable'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $paymentAttrModel = PaymentAttrModel::query()->where('uid', $inputData['uid'])->first();
-        if (!$paymentAttrModel) {
-            return json_fail('该支付类型不存在!');
-        }
-        $paymentAttrModel->pay_code = $inputData['pay_code'] ?? $paymentAttrModel->pay_code;
-        $paymentAttrModel->type_name = $inputData['type_name'] ?? $paymentAttrModel->type_name;
-        $paymentAttrModel->code = $inputData['code'] ?? $paymentAttrModel->code;
-        if (!$paymentAttrModel->save()) {
-            return json_fail('修改失败!');
-        }
-        return json_success('修改成功!');
-    }
-    /**
-     * 删除
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function deletePaymentAttr(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $paymentAttrModel = PaymentAttrModel::query()->where('uid', $inputData['uid'])->first();
-        if (!$paymentAttrModel) {
-            return json_fail('该支付类型不存在!');
-        }
-        if (!$paymentAttrModel->delete()) {
-            return json_fail('删除失败!');
-        }
-        return json_success('删除成功!');
-    }
-    /**
-     * 支付通道修改
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse
-     */
-    public function paymentUpdate(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|integer', 'status' => 'nullable|in:1,2', 'name' => 'nullable|string', 'pay_code' => 'nullable|string', 'partner_id' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $payment = make(OrderRepository::class)->findBy('id', $inputData['id']);
-        if (empty($payment)) {
-            return json_fail(trans('common.err_resource_not_found'));
-        }
-        $oldPayment = clone $payment;
-        if (!empty($inputData['status'])) {
-            $payment->status = $inputData['status'];
-        }
-        if (!empty($inputData['name'])) {
-            $payment->name = $inputData['name'];
-        }
-        if (!empty($inputData['pay_code'])) {
-            $payment->pay_code = $inputData['pay_code'];
-        }
-        if (!empty($inputData['partner_id'])) {
-            $payment->partner_id = $inputData['partner_id'];
-        }
-        $result = $payment->save();
-        if (!$result) {
-            return json_fail('修改失败');
-        } else {
-            $logSubject = '修改一个支付通道,通道名字:' . $payment->name;
-            $logSvalue = $payment->id;
-            $logDbData = ['after_items' => [$payment->toArray()], 'before_items' => [$oldPayment->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new PaymentSuccessUidResponse($payment->id);
-        }
-    }
-    /**
-     * 通道支付类型列表
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|CommonPagesResponse
-     */
-    public function paymentTypeList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'status' => 'nullable|in:1,2', 'pay_type' => 'nullable|in:1,2,3', 'payment_uid' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['weights', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page'] ?? 1);
-        // 注意,单例分页一定要克隆一个(保证前面没用使用到paginate);
-        $field = ['uid', 'name', 'pay_type', 'payment_attr_uid', 'status', 'created_at', 'updated_at', 'code', 'limit_type', 'limit', 'remark', 'payment_uid', 'belong_device', 'weights'];
-        $paymentType = make(PaymentTypeRepository::class)->pushCriteria(new PaymentTypeLimitCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page);
-        if ($paymentType->isNotEmpty()) {
-            $payment = make(OrderRepository::class)->getPaymentData(['name', 'uid'])->keyBy('uid');
-            foreach ($paymentType->items() as &$item) {
-                $item->paymetn_name = $payment[$item->payment_uid]->name;
-            }
-        }
-        return new CommonPagesResponse($paymentType);
-    }
-    /**
-     * 通道支付类型添加
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse
-     */
-    public function paymentTypeAdd(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['name' => 'required|string', 'code' => 'required|string', 'limit_type' => 'required|integer', 'pay_type' => 'required|in:1,2,3,5', 'limit' => 'required|string', 'weights' => 'required|integer', 'remark' => 'nullable|string', 'belong_device' => 'nullable'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        // 查询数据
-        $paymentAttrModel = PaymentAttrModel::query()->where('uid', $inputData['code'])->first();
-        if (!$paymentAttrModel) {
-            return json_fail('该类型不存在!');
-        }
-        $setarr = ['name' => $inputData['name'], 'status' => 2, 'payment_uid' => $paymentAttrModel->pay_code, 'pay_type' => $inputData['pay_type'], 'code' => $paymentAttrModel->code, 'payment_attr_uid' => $paymentAttrModel->uid, 'limit_type' => $inputData['limit_type'], 'limit' => $inputData['limit'], 'weights' => $inputData['weights'], 'remark' => $inputData['remark'], 'belong_device' => $inputData['belong_device'] ?? null];
-        $result = make(PaymentTypeRepository::class)->create($setarr);
-        if (!$result) {
-            return json_fail('创建失败');
-        } else {
-            $logSubject = '添加一个通道类型, 名字:' . $inputData['name'];
-            $logSvalue = $result->id;
-            $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new PaymentSuccessUidResponse($result->uid);
-        }
-    }
-    /**
-     * 通道支付类型修改
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse
-     */
-    public function paymentTypeUpdate(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['name' => "required|string", 'uid' => "required", 'code' => 'required|string', 'limit_type' => 'required|integer', 'pay_type' => 'required|in:1,2,3,5', 'limit' => 'required|string', 'weights' => 'required|integer', 'remark' => 'nullable|string', 'status' => 'nullable|in:1,2', 'belong_device' => 'nullable'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $paymentType = make(PaymentTypeRepository::class)->findBy('uid', $inputData['uid']);
-        if (empty($paymentType)) {
-            return json_fail(trans('common.err_resource_not_found'));
-        }
-        $oldPaymentType = clone $paymentType;
-        if (!empty($inputData['code'])) {
-            // 查询数据
-            $paymentAttrModel = PaymentAttrModel::query()->where('uid', $inputData['code'])->first();
-            if (!$paymentAttrModel) {
-                return json_fail('该类型不存在!');
-            }
-            $paymentType->payment_uid = $paymentAttrModel->pay_code;
-            $paymentType->code = $paymentAttrModel->code;
-            $paymentType->payment_attr_uid = $paymentAttrModel->uid;
-        }
-        if (!empty($inputData['limit_type'])) {
-            $paymentType->limit_type = $inputData['limit_type'];
-        }
-        if (!empty($inputData['name'])) {
-            $paymentType->name = $inputData['name'];
-        }
-        if (!empty($inputData['pay_type'])) {
-            $paymentType->pay_type = $inputData['pay_type'];
-        }
-        if (!empty($inputData['limit'])) {
-            $paymentType->limit = $inputData['limit'];
-        }
-        if (!empty($inputData['weights'])) {
-            $paymentType->weights = $inputData['weights'];
-        }
-        if (!empty($inputData['remark'])) {
-            $paymentType->remark = $inputData['remark'];
-        }
-        if (!empty($inputData['status'])) {
-            $paymentType->status = $inputData['status'];
-        }
-        if (!empty($inputData['belong_device'])) {
-            $paymentType->belong_device = $inputData['belong_device'];
-        } else {
-            $paymentType->belong_device = null;
-        }
-        $result = $paymentType->save();
-        if (!$result) {
-            return json_fail('修改失败');
-        } else {
-            $logSubject = '修改一个通道类型, 名字:' . $paymentType->name;
-            $logSvalue = $paymentType->uid;
-            $logDbData = ['after_items' => [$paymentType->toArray()], 'before_items' => [$oldPaymentType->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            make(PaymentService::class)->delPaymentTypeCache();
-            return new PaymentSuccessUidResponse($paymentType->uid);
-        }
-    }
-    /**
-     * 通道支付类型删除
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse
-     */
-    public function paymentTypeDelete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $paymentType = make(PaymentTypeRepository::class)->findBy('uid', $inputData['uid']);
-        if (empty($paymentType)) {
-            return json_fail(trans('common.err_resource_not_found'));
-        }
-        $oldManagerType = clone $paymentType;
-        $result = $paymentType->delete();
-        if (!$result) {
-            return json_fail('删除失败');
-        } else {
-            $logSubject = '删除一个通道类型,名字:' . $paymentType->name;
-            $logSvalue = $oldManagerType->manager_id;
-            $logDbData = ['after_items' => [], 'before_items' => [$oldManagerType->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            make(PaymentService::class)->delPaymentTypeCache();
-            return new PaymentSuccessUidResponse($inputData['uid']);
-        }
-    }
-    /**
-     * 通道下拉
-     *
-     * @return CommonPagesResponse
-     */
-    public function paymentDown()
-    {
-        $payment = make(OrderRepository::class)->getPaymentData(['name', 'uid'])->keyBy('uid');
-        return new CommonPagesResponse($payment);
-    }
-}

+ 0 - 56
runtime/container/proxy/Modules_Manage_Controllers_HotelRecordController.proxy.php

@@ -1,56 +0,0 @@
-<?php
-
-namespace Modules\Manage\Controllers;
-
-use App\Model\Mongo\HotelLogModel;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use MongoDB\Client;
-/**
- * 酒店记录
- */
-class HotelRecordController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     *  开房记录列表
-     */
-    public function lists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['ct_type' => 'nullable', 'ct_fid' => 'nullable', 'page' => 'nullable|numeric', 'page_size' => 'nullable|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        if ($inputData['ct_type']) {
-            // 判断类型
-            if (!in_array($inputData['ct_type'], ['OTH', 'ID', 'VSA', 'TXZ', 'GID', 'TBZ', 'HXZ'])) {
-                return json_fail('ct_type 错误');
-            }
-        }
-        $where = [];
-        // 存在且不等于空的情况下添加条件
-        if (isset($inputData['ct_type']) && $inputData['ct_type'] != '') {
-            $where['ct_type'] = $inputData['ct_type'];
-        }
-        if (isset($inputData['ct_fid']) && $inputData['ct_fid'] != '') {
-            $where['ct_fid'] = $inputData['ct_fid'];
-        }
-        if (count($where) !== 2) {
-            return json_fail('两个条件必须存在才执行搜索!');
-        }
-        $options = ['skip' => 0, 'limit' => 30, 'sort' => ['check_time' => -1]];
-        // 查询数据
-        $hotelRecordModel = make(HotelLogModel::class);
-        $hotelRecordData = $hotelRecordModel->db()->find($where, $options)->toArray();
-        return json_success($hotelRecordData);
-    }
-}

+ 0 - 104
runtime/container/proxy/Modules_Manage_Controllers_InviteRuleController.proxy.php

@@ -1,104 +0,0 @@
-<?php
-
-/**
- * 邀请规则.
- *
- * @author jim <jim458734573@gmail.com>
- * @date   2020-01-29 10:15:03
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Model\InviteRuleModel;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-class InviteRuleController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    public function lists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $result = InviteRuleModel::query()->paginate($inputData['page_size'], ['*'], 'page', $inputData['page']);
-        return json_success($result);
-    }
-    public function store(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['person' => 'required|int', 'day' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $result = InviteRuleModel::query()->create($inputData);
-        // 操作日志.
-        $logSubject = '保存邀请规则';
-        $logSvalue = '';
-        $logDbData = ['after_items' => [], 'before_items' => []];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result);
-    }
-    public function detail(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['rule_id' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $result = InviteRuleModel::query()->find($inputData['rule_id']);
-        return json_success($result);
-    }
-    public function update(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['rule_id' => 'required|int', 'person' => 'required|int', 'day' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $old_items = InviteRuleModel::query()->where('id', $inputData['rule_id'])->first();
-        $result = InviteRuleModel::query()->where('id', $inputData['rule_id'])->update(['person' => $inputData['person'], 'day' => $inputData['day']]);
-        $new_items = InviteRuleModel::query()->where('id', $inputData['rule_id'])->first();
-        // 操作日志.
-        $logSubject = '更改邀请规则';
-        $logSvalue = $inputData['rule_id'];
-        $logDbData = ['after_items' => [$new_items->toArray()], 'before_items' => [$old_items->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result);
-    }
-    public function delete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['rule_id' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $old_info = InviteRuleModel::query()->where('id', $inputData['rule_id'])->first();
-        $result = InviteRuleModel::query()->where('id', $inputData['rule_id'])->delete();
-        // 操作日志.
-        $old_items = clone $old_info;
-        $logSubject = '删除邀请规则';
-        $logSvalue = $inputData['rule_id'];
-        $logDbData = ['after_items' => [], 'before_items' => [$old_items->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result);
-    }
-}

+ 0 - 90
runtime/container/proxy/Modules_Manage_Controllers_M3u8Controller.proxy.php

@@ -1,90 +0,0 @@
-<?php
-
-namespace Modules\Manage\Controllers;
-
-use App\Repositories\AdRepository;
-use App\Repositories\OriginalRepository;
-use App\Repositories\ShopsRepository;
-use App\Repositories\Utils\M3u8CacheRepository;
-use App\Repositories\VideoRepository;
-use Hyperf\HttpServer\Request;
-class M3u8Controller extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 获取raw
-     * @param Request $request
-     * @param VideoRepository $videoRepository
-     * @return \Psr\Http\Message\ResponseInterface
-     */
-    public function raw(Request $request, VideoRepository $videoRepository, AdRepository $adRepository, OriginalRepository $goodsRepository, ShopsRepository $shopsRepository)
-    {
-        $innerToken = 'vj2x2fgvc';
-        // 不走中间件,定义个内部简单通信token
-        $token = $request->input('tk', '');
-        if ($token != $innerToken) {
-            return self::responseM3u8Raw('');
-        }
-        $module = trim(strtolower($request->input('module', '')));
-        $pk = substr($request->input('pk', ''), 0, 16);
-        $rateType = substr($request->input('rate_type', ''), 0, 32);
-        // 指定的比特率.
-        $item = null;
-        $m3u8PlayUrl = '';
-        switch ($module) {
-            case 'video':
-                $item = $videoRepository->findBy('id', $pk, ['id', 'mu']);
-                if (!empty($item->mu)) {
-                    $m3u8PlayUrl = $item->mu;
-                }
-                break;
-            case 'ad':
-                $item = $adRepository->findBy('id', $pk, ['id', 'play']);
-                if (!empty($item->play)) {
-                    $m3u8PlayUrl = $item->play;
-                }
-                break;
-            case 'shop':
-                $item = $shopsRepository->findBy('uid', $pk, ['video_address']);
-                if (!empty($item->video_address)) {
-                    $m3u8PlayUrl = $item->video_address;
-                }
-                break;
-            case 'goods':
-                $item = $goodsRepository->findBy('uid', $pk, ['video_address']);
-                if (!empty($item->video_address)) {
-                    $m3u8PlayUrl = $item->video_address;
-                }
-                break;
-        }
-        if (empty($m3u8PlayUrl)) {
-            return self::responseM3u8Raw('');
-        }
-        $raw = M3u8CacheRepository::getMu38Raw($m3u8PlayUrl, false);
-        return self::responseM3u8Raw($raw);
-    }
-    /**
-     * @return string[]
-     */
-    private function getHeaders()
-    {
-        return ['Content-Type' => 'application/x-mpegURL'];
-    }
-    /**
-     * 返回raw
-     * @param $raw
-     * @return \Psr\Http\Message\ResponseInterface
-     */
-    private function responseM3u8Raw($raw)
-    {
-        return response($raw, 200, self::getHeaders());
-    }
-}

+ 0 - 300
runtime/container/proxy/Modules_Manage_Controllers_ManagerController.proxy.php

@@ -1,300 +0,0 @@
-<?php
-
-/**
- * 管理员控制器.
- *
- * @author jim <jim458734573@gmail.com>
- * @date   2020-01-23 00:08:32
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Constants\CommonConstant;
-use App\Model\ManagerModel;
-use App\Repositories\Criterias\CommonWithCriteria;
-use App\Repositories\Criterias\ManagerPagesCriteria;
-use App\Repositories\Criterias\OrderLimitCriteria;
-use App\Repositories\ManagerRepository;
-use App\Repositories\PermissionRoleRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Manage\Responses\CommonSuccessPkResponse;
-use Modules\Manage\Responses\ManagerDetailResponse;
-use Modules\Manage\Responses\ManagerPagesResponse;
-class ManagerController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 分页列表.
-     * @param  ManagerRepository  $managerRepository
-     * @param  ValidatorFactoryInterface  $validatorFactory
-     * @return mixed|ManagerPagesResponse
-     */
-    public function lists(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'manager_id' => 'nullable', 'username' => 'nullable', 'nick' => 'nullable', 'is_locked' => 'nullable|integer', 'role_id' => 'nullable|integer', 'email' => 'nullable|email'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['created_at', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        // 注意,单例分页一定要克隆一个(保证前面没用使用到paginate);
-        $managers = make(ManagerRepository::class)->pushCriteria(new ManagerPagesCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        return new ManagerPagesResponse($managers);
-    }
-    /**
-     * 详情
-     * @param  ManagerRepository  $managerRepository
-     * @param  ValidatorFactoryInterface  $validatorFactory
-     * @return mixed|ManagerDetailResponse
-     */
-    public function detail(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['manager_id' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $manager = make(ManagerRepository::class)->pushCriteria(new CommonWithCriteria(['role']))->findBy('manager_id', $inputData['manager_id']);
-        return new ManagerDetailResponse($manager);
-    }
-    /**
-     * 添加.
-     * @param  ManagerRepository  $managerRepository
-     * @param  ValidatorFactoryInterface  $validatorFactory
-     * @param  PermissionRoleRepository  $permissionRoleRepository
-     * @return mixed|CommonSuccessPkResponse
-     */
-    public function add(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory, PermissionRoleRepository $permissionRoleRepository)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['username' => 'required|min:2|max:60', 'nick' => 'required|max:60', 'role_id' => 'required|integer', 'password' => 'required|min:6|max:64', 'email' => 'nullable|max:120'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $username = strtolower(trim($inputData['username']));
-        if (make(ManagerRepository::class)->isExistsUsername($username)) {
-            return json_fail('用户名已经存在');
-        }
-        $roleId = intval($inputData['role_id']);
-        $roleName = '';
-        $roleObj = make(PermissionRoleRepository::class)->find($roleId);
-        if (!empty($roleObj)) {
-            $roleName = $roleObj->name;
-        }
-        $setarr = ['username' => $username, 'nick' => trim($inputData['nick']), 'role_id' => intval($roleId), 'role_name' => $roleName];
-        if (isset($inputData['email'])) {
-            $email = trim($inputData['email']);
-        } else {
-            $email = '';
-        }
-        $salt = random(6);
-        $password = make(ManagerRepository::class)->generatePassword($inputData['password'], $salt);
-        $setarr['salt'] = $salt;
-        $setarr['password'] = $password;
-        $setarr['email'] = $email;
-        $result = make(ManagerRepository::class)->create($setarr);
-        if (!$result) {
-            return json_fail('创建失败');
-        } else {
-            $logSubject = '添加一个管理员,账号:' . $username;
-            $logSvalue = $result->manager_id;
-            $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new CommonSuccessPkResponse($result->manager_id);
-        }
-    }
-    /**
-     * 修改管理员.
-     * @param  ManagerRepository  $managerRepository
-     * @param  ValidatorFactoryInterface  $validatorFactory
-     * @param  PermissionRoleRepository  $permissionRoleRepository
-     * @return mixed|CommonSuccessPkResponse
-     */
-    public function modify(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory, PermissionRoleRepository $permissionRoleRepository)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['manager_id' => 'required|string', 'nick' => 'required|max:60', 'role_id' => 'required|integer', 'password' => 'nullable|min:6|max:64', 'email' => 'nullable|max:120'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $manager = make(ManagerRepository::class)->findBy('manager_id', $inputData['manager_id']);
-        if (empty($manager)) {
-            return json_fail(trans('common.err_resource_not_found'));
-        }
-        $oldManager = clone $manager;
-        $manager->nick = $inputData['nick'];
-        $manager->role_id = intval($inputData['role_id']);
-        $roleName = '';
-        $roleObj = make(PermissionRoleRepository::class)->find($manager->role_id);
-        if (!empty($roleObj)) {
-            $roleName = $roleObj->name;
-        }
-        $manager->role_name = $roleName;
-        if (isset($inputData['email'])) {
-            $email = trim($inputData['email']);
-            $manager->email = $email;
-        } else {
-            $manager->email = '';
-        }
-        if (!empty($inputData['password'])) {
-            $salt = $manager->salt;
-            if (empty($salt)) {
-                $salt = random(6);
-            }
-            $password = make(ManagerRepository::class)->generatePassword($inputData['password'], $manager->salt);
-            $manager->salt = $salt;
-            $manager->password = $password;
-        }
-        $result = $manager->save();
-        if (!$result) {
-            return json_fail('修改失败');
-        } else {
-            $logSubject = '修改一个管理员,账号:' . $manager->username;
-            $logSvalue = $manager->manager_id;
-            $logDbData = ['after_items' => [$manager->toArray()], 'before_items' => [$oldManager->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new CommonSuccessPkResponse($manager->manager_id);
-        }
-    }
-    /**
-     * 删除单个.
-     * @param  ManagerRepository  $managerRepository
-     * @param  ValidatorFactoryInterface  $validatorFactory
-     * @return mixed|CommonSuccessPkResponse
-     */
-    public function delete(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['manager_id' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $manager = make(ManagerRepository::class)->findBy('manager_id', $inputData['manager_id']);
-        if (empty($manager)) {
-            return json_fail(trans('common.err_resource_not_found'));
-        }
-        $oldManager = clone $manager;
-        $result = $manager->delete();
-        if (!$result) {
-            return json_fail('删除失败');
-        } else {
-            $logSubject = '删除一个管理员,账号:' . $oldManager->username;
-            $logSvalue = $oldManager->manager_id;
-            $logDbData = ['after_items' => [], 'before_items' => [$oldManager->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new CommonSuccessPkResponse($inputData['manager_id']);
-        }
-    }
-    /**
-     * 批量操作.
-     * @param  ManagerRepository  $managerRepository
-     * @param  ValidatorFactoryInterface  $validatorFactory
-     * @return mixed
-     */
-    public function batch(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $operateName = $inputData['operate_name'] ?? '';
-        switch ($operateName) {
-            case 'delete':
-                $itemPks = $inputData['item_pks'] ?? [];
-                if (!empty($itemPks)) {
-                    $model = new ManagerModel();
-                    $resultItems = $model->whereIn('manager_id', $itemPks)->delete();
-                    if ($resultItems) {
-                        $strPks = implode(',', $itemPks);
-                        $logSubject = '批量删除多个管理员';
-                        $logSvalue = $strPks;
-                        $logDbData = ['after_items' => [], 'before_items' => []];
-                        $this->log($logSubject, $logSvalue, $logDbData);
-                    }
-                }
-                $data = ['result' => 'success', 'pks' => $itemPks];
-                return json_success($data);
-                break;
-            default:
-                break;
-        }
-        return json_fail('未知操作');
-    }
-    /**
-     * 我的详情.
-     * @return mixed|ManagerDetailResponse
-     */
-    public function detailMe()
-    {
-        $manager = $this->getCurrentManger();
-        if (empty($manager)) {
-            return json_fail(trans('common.err_resource_not_found'));
-        }
-        return new ManagerDetailResponse($manager);
-    }
-    /**
-     * 修改自己信息.
-     * @return mixed|CommonSuccessPkResponse
-     */
-    public function modifyMe()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['nick' => 'required|max:60', 'password' => 'nullable|min:6|max:64', 'email' => 'nullable|max:120'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $manager = $this->getCurrentManger();
-        if (empty($manager)) {
-            return json_fail(trans('common.err_resource_not_found'));
-        }
-        $oldManager = clone $manager;
-        $manager->nick = $inputData['nick'];
-        if (isset($inputData['email'])) {
-            $email = trim($inputData['email']);
-            $manager->email = $email;
-        } else {
-            $manager->email = '';
-        }
-        if (!empty($inputData['password'])) {
-            $salt = $manager->salt;
-            if (empty($salt)) {
-                $salt = random(6);
-            }
-            $password = make(ManagerRepository::class)->generatePassword($inputData['password'], $manager->salt);
-            $manager->salt = $salt;
-            $manager->password = $password;
-        }
-        $result = $manager->save();
-        if (!$result) {
-            return json_fail('修改失败');
-        } else {
-            $logSubject = '修改自己管理员信息,账号:' . $manager->username;
-            $logSvalue = $manager->manager_id;
-            $logDbData = ['after_items' => [$manager->toArray()], 'before_items' => [$oldManager->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new CommonSuccessPkResponse($manager->manager_id);
-        }
-    }
-}

+ 0 - 675
runtime/container/proxy/Modules_Manage_Controllers_OrderController.proxy.php

@@ -1,675 +0,0 @@
-<?php
-
-/**
- * 订单相关
- * @author x.b
- *
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Constants\ChangeLogConstant;
-use App\Constants\CommonConstant;
-use App\Constants\OrderConstrant;
-use App\Model\CoinsOrderModel;
-use App\Model\PaymentModel;
-use App\Model\VipCardModel;
-use App\Model\VipOrderModel;
-use App\Repositories\ChangeLogRepository;
-use App\Repositories\Criterias\ChangeLogCriteria;
-use App\Repositories\Criterias\OrderLimitCriteria;
-use App\Repositories\OrderRepository as OrderRepository;
-use App\Model\UserModel;
-use App\Model\VipOrderModel as Model;
-use App\Repositories\Service\CommonService;
-use App\Repositories\Service\QueueService;
-use Carbon\Carbon;
-use Hyperf\DbConnection\Db;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Manage\Responses\OrderChangeListResponse;
-class OrderController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    // 临时-写死,急上线,后续配置为动态的
-    public $payment_data = ['white_shark' => '大白鲨'];
-    /**
-     * 订单列表
-     * @return mixed
-     * @example param_json_data string:
-     * {"handshake":"","data":{"page":1,"page_size":5,"search":{"order_sn":"","nick":"","user_id":"","user_code":"","device_type":"","status":"","pay_gate_way":"","is_admin_action":"","vip_title":"","stime":"","otime":"","stime_pay":"","otime_pay":""},"order":"created_at","order_sort":"desc"}}
-     * @deprecated 目前,从 支付方式id 等价于 查询出支付通道! pay_gate_way
-     */
-    public function list()
-    {
-        $inputData = $this->getJsonData();
-        $page = isset($inputData['page']) ? (int) $inputData['page'] : 1;
-        $page_size = isset($inputData['page_size']) ? (int) $inputData['page_size'] : 20;
-        $select = ['vip_order.*', 'user.nick', 'user.id AS user_id', 'user.code AS user_code', 'user.device_type'];
-        $model = Model::query();
-        $order_key = isset($inputData['order']) ? $inputData['order'] : 'id';
-        $order_value = isset($inputData['order_sort']) ? $inputData['order_sort'] : 'desc';
-        if (!$order_key) {
-            $order_key = 'id';
-            //不要信任前端,他可能会传个空字符串过来!
-        }
-        if (!$order_value) {
-            $order_value = 'desc';
-        }
-        // order_sn订单号,status 订单状态, pay_gate_way 支付方式ID(支付方式/支付通道), device_type设备类型,stime 订单创建时间-开始, otime 订单创建时间-结束, stime_pay 订单支付时间-开始, otime_pay 订单支付时间结束  is_admin_action 后台是否查到处理
-        // nick 用户表-用户名,user_id 用户表-用户ID, user_code 用户表-用户邀请码,
-        $search = isset($inputData['search']) ? $inputData['search'] : array();
-        if ($search) {
-            foreach ($search as $k => $v) {
-                if (!strlen((string) $v)) {
-                    continue;
-                }
-                switch ($k) {
-                    case "nick":
-                        // 用户表-昵称
-                        $model->where('user.' . $k, 'like', "{$v}%");
-                        break;
-                    case "user_code":
-                        // 用户表-邀请码
-                        $model->where('user.' . $k, $v);
-                        break;
-                    case "order_sn":
-                        // 订单号
-                        $model->where('vip_order.' . $k, 'like', "{$v}%");
-                        break;
-                    case "stime":
-                        // 自定义-订单开始日期
-                        $model->where('vip_order.created_at', '>=', $v);
-                        break;
-                    case "otime":
-                        // 自定义-订单结束日期
-                        $model->where('vip_order.created_at', '<=', Carbon::parse($v)->endOfDay()->toDateTimeString());
-                        break;
-                    case "stime_pay":
-                        // 自定义-订单支付开始日期
-                        $model->where('vip_order.pay_time', '>=', $v);
-                        break;
-                    case "otime_pay":
-                        // 自定义-订单支付结束日期
-                        $model->where('vip_order.pay_time', '<=', $v);
-                        break;
-                    default:
-                        $model->where('vip_order.' . $k, $v);
-                }
-            }
-        }
-        $result = $model->select($select)->leftJoin('user', 'vip_order.user_id', '=', 'user.id')->orderBy((string) $order_key, (string) $order_value)->paginate($page_size, ['*'], 'page', $page);
-        $payment = make(OrderRepository::class)->all(['name', 'pay_code'])->keyBy('pay_code');
-        return json_success($result);
-    }
-    /**
-     * 订单列表 - 支付方式/支付通道列表(下拉选项)
-     * @return object
-     * @example param_json_data string nobody
-     */
-    public function paymentData()
-    {
-        //return json_success(make(OrderRepository::class)->getPaymentData());
-        $data = ['pay_gate_way' => []];
-        $items = PaymentModel::query()->orderBy('id', 'DESC')->get();
-        if ($items->count()) {
-            foreach ($items as $item) {
-                $data['pay_gate_way'][] = ['id' => $item->id, 'name' => $item->name];
-            }
-        }
-        // 特殊处理,兼容目前前端的对接数据
-        //        $r = $this->payment_data;
-        //        $data = array();
-        //        foreach ($r as $k => $v) {
-        //            $data[] = [
-        //                'id' => $k,
-        //                'name' => $v,
-        //            ];
-        //        }
-        return json_success($data);
-    }
-    /**
-     * 订单列表 - 购买内容(下拉选项)
-     * @return object
-     * @example param_json_data string nobody
-     */
-    public function vipTitleData()
-    {
-        $data = [];
-        $items = VipCardModel::query()->orderBy('sort', 'DESC')->get(['id', 'title']);
-        if ($items->count()) {
-            foreach ($items as $item) {
-                $data[] = ['id' => $item->id, 'name' => $item->title];
-            }
-        }
-        /*$select = ['vip_title'];
-          $r = Model::query()
-              ->select($select)
-              ->groupBy('vip_title')
-              ->get();
-          $data = array();
-          foreach ($r as $k => $v) {
-              $data[] = [
-                  'id' => $k,
-                  'name' => $v->vip_title,
-              ];
-          }*/
-        return json_success($data);
-    }
-    /**
-     * 补单
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example param_json_data string:  {"handshake":"","data":{"order_sn":"YV202002242305189073","trade_no":"xx支付单号","repair_remark":"xx补单备注"}}
-     *  处理逻辑:vip_order 订单表标示已付款和付款日期;  collections 表创建收款单记录, user表添加会员日期,
-     *       成功之后,在mongodb中创建一个 补单记录。
-     *  备注: 不需要去内调回调接口,不要验签!
-     */
-    public function again(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = [
-            'order_sn' => 'required|string',
-            'trade_no' => 'required|string',
-            //支付单号
-            'repair_remark' => 'required|string',
-        ];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $order_sn = $inputData['order_sn'];
-        $trade_no = $inputData['trade_no'];
-        $repair_remark = isset($inputData['repair_remark']) ? $inputData['repair_remark'] : '';
-        $order_info = make(OrderRepository::class)->getOrderInfo($order_sn);
-        if (!$order_info) {
-            return json_fail('订单不存在');
-        }
-        //        if ($order_info['pay_time']) {
-        //            return json_fail('此订单已处理,请勿重复操作!');
-        //        }
-        if ($order_info['status'] == 1) {
-            return json_fail('此订单已处理,请勿重复操作!!');
-        }
-        $user_info = UserModel::query()->where('id', $order_info['user_id'])->first();
-        //处理补单
-        if (!make(OrderRepository::class)->again($order_sn, $trade_no, $repair_remark)) {
-            return json_fail('处理失败');
-        }
-        // 创建管理员日志
-        $oldItem = clone $user_info;
-        $newitem = UserModel::query()->where('id', $order_info['user_id'])->first();
-        $oldItem2 = clone $order_info;
-        $newitem2 = make(OrderRepository::class)->getOrderInfo($order_sn);
-        //返佣计算 异步
-        make(QueueService::class)->rebateTwoUserJob(['user_id' => $newitem2->user_code, 'amount' => $newitem2->real_amount]);
-        $logSubject = "补单,用户id:{$user_info['id']},来源订单号:{$order_sn}";
-        $logSvalue = $oldItem->id;
-        $logDbData = ['after_items' => [$newitem->toArray(), $newitem2->toArray()], 'before_items' => [$oldItem->toArray(), $oldItem2->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success('', '处理成功');
-    }
-    /**
-     * 每日充值(统计列表)  ( v1 版本, 后续项目空闲 v2优化-会单独新设一个表,然后服务器定时任务去查一次,再往新表存下统计数据 )
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example param_json_data string:
-     *    {"handshake":"","data":{"search":{"pay_gate_way":"","stime":"","otime":""}}}
-     *
-     *    {"handshake":"","data":{"search":{"pay_gate_way":"","stime":"2020-02-01","otime":"2020-02-28"}}}
-     *
-     *    {"handshake":"","data":{"search":{"pay_gate_way":"","stime":"2020-02-01","otime":"2020-02-28"}}}
-     */
-    public function dayList()
-    {
-        $inputData = $this->getJsonData();
-        $search = isset($inputData['search']) ? $inputData['search'] : array();
-        $stime = isset($search['stime']) ? $search['stime'] : '';
-        // 传参如: 2020-2-20
-        if (!$stime) {
-            //$stime = date('Y-m-d'); // 今天日期
-            $stime = date('Y-m-1');
-            // 此月1号
-        }
-        $otime = isset($search['otime']) ? Carbon::parse($search['otime'])->endOfDay()->toDateTimeString() : '';
-        // 传参如: 2020-2-22
-        if (!$otime) {
-            $otime = date('Y-m-d', strtotime("+1 day"));
-            //明天日期
-        }
-        $pay_gate_way = isset($search['pay_gate_way']) ? $search['pay_gate_way'] : '';
-        // 查询所有数据统计
-        if ($pay_gate_way) {
-            $sql = "SELECT LEFT (created_at,10) AS created_date,count(*) AS order_all,sum(order_amount) AS order_amount_all,sum(real_amount) AS real_amount_all,pay_gate_way FROM vip_order WHERE pay_gate_way=? AND created_at>=? AND created_at<=? GROUP BY pay_gate_way,created_date ORDER BY created_date DESC,pay_gate_way ASC";
-            $order_data_all = Db::select($sql, [$pay_gate_way, $stime, $otime]);
-        } else {
-            $sql = "SELECT LEFT (created_at,10) AS created_date,count(*) AS order_all,sum(order_amount) AS order_amount_all,sum(real_amount) AS real_amount_all,pay_gate_way FROM vip_order WHERE created_at>=? AND created_at<=? GROUP BY pay_gate_way,created_date ORDER BY created_date DESC,pay_gate_way ASC";
-            $order_data_all = Db::select($sql, [$stime, $otime]);
-        }
-        if (!$order_data_all) {
-            $order_data_all = array();
-        } else {
-            $order_data_all = json_decode(json_encode($order_data_all), true);
-        }
-        // 仅查支付成功的数据统计
-        if ($pay_gate_way) {
-            $sql = "SELECT LEFT (created_at,10) AS created_date,count(*) AS order_all,sum(order_amount) AS order_amount_all,sum(real_amount) AS real_amount_all,pay_gate_way FROM vip_order WHERE pay_gate_way=? AND status=1 AND created_at>=? AND created_at<=? GROUP BY pay_gate_way,created_date ORDER BY created_date DESC,pay_gate_way ASC";
-            $order_data_pay = Db::select($sql, [$pay_gate_way, $stime, $otime]);
-        } else {
-            $sql = "SELECT LEFT (created_at,10) AS created_date,count(*) AS order_all,sum(order_amount) AS order_amount_all,sum(real_amount) AS real_amount_all,pay_gate_way FROM vip_order WHERE status=1 AND created_at>=? AND created_at<=? GROUP BY pay_gate_way,created_date ORDER BY created_date DESC,pay_gate_way ASC";
-            $order_data_pay = Db::select($sql, [$stime, $otime]);
-        }
-        if (!$order_data_pay) {
-            $order_data_pay = array();
-        } else {
-            $order_data_pay = json_decode(json_encode($order_data_pay), true);
-        }
-        // 开始业务处理和统计 ( 当前是v1版(不提供分页,便于统计),后续 优化时 由 服务器做个定时任务,比如早上1点,定时去查询统计昨日的数据后 往 指定的新表 记录统计后的数据;后台在直接从新表中原样展示数据(可提供分页) )
-        $order_data_pay_action = array();
-        if ($order_data_pay) {
-            foreach ($order_data_pay as $v) {
-                $order_data_pay_action[$v['pay_gate_way']][] = $v;
-            }
-        }
-        // 组装数据: (日期,支付方式ID,支付通道,创建订单数,成功订单量,订单金额,成功金额,成功率% )
-        $data = array();
-        foreach ($order_data_all as $v) {
-            $action_order_data_pay_info = self::actionOrderDataPayInfo($v['pay_gate_way'], $v['created_date'], $order_data_pay_action);
-            $order_all_pay = isset($action_order_data_pay_info['order_all']) ? $action_order_data_pay_info['order_all'] : 0;
-            $real_amount_all_pay = isset($action_order_data_pay_info['real_amount_all']) ? $action_order_data_pay_info['real_amount_all'] : 0;
-            $conversion = round(round($order_all_pay / $v['order_all'], 4) * 100, 2);
-            $data[] = array(
-                'created_date' => $v['created_date'],
-                'pay_gate_way' => $v['pay_gate_way'],
-                'order_all' => $v['order_all'],
-                //创建订单数
-                'order_all_pay' => $order_all_pay,
-                //成功订单量
-                'real_amount_all' => $v['real_amount_all'],
-                //订单金额(以实付金额为准,咨询过 田七 ), order_amount_all 为订单原始金额
-                'real_amount_all_pay' => $real_amount_all_pay,
-                //真实支付的金额(以实付金额为准,咨询过 田七 )-用户已付款的
-                'conversion' => $conversion,
-            );
-        }
-        return json_success($data);
-    }
-    /**
-     * @param $pay_gate_way
-     * @param $created_date
-     * @param $order_data_pay_action
-     * @return array
-     */
-    protected function actionOrderDataPayInfo($pay_gate_way = '', $created_date = '', $order_data_pay_action = array())
-    {
-        if (isset($order_data_pay_action[$pay_gate_way])) {
-            foreach ($order_data_pay_action[$pay_gate_way] as $kk => $vv) {
-                if ($vv['created_date'] == $created_date) {
-                    return $vv;
-                    break;
-                }
-            }
-            return array();
-        } else {
-            return array();
-        }
-    }
-    /**
-     * 每日用户成功率(统计列表) ( v1 版本, 后续项目空闲 v2优化-会单独新设一个表,然后服务器定时任务去查一次,再往新表存下统计数据 )
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example param_json_data string:
-     *    {"handshake":"","data":{"search":{"stime":"","otime":""}}}
-     *
-     *    {"handshake":"","data":{"search":{"stime":"2020-02-01","otime":"2020-02-28"}}}
-     *
-     *    {"handshake":"","data":{"search":{"stime":"2020-02-01","otime":"2020-02-28"}}}
-     */
-    public function dayListUser()
-    {
-        set_time_limit(0);
-        $inputData = $this->getJsonData();
-        $search = isset($inputData['search']) ? $inputData['search'] : array();
-        $stime = isset($search['stime']) ? $search['stime'] : '';
-        // 传参如: 2020-2-20
-        if (!$stime) {
-            $stime = date('Y-m-1');
-            // 此月1号
-        }
-        $otime = isset($search['otime']) ? Carbon::parse($search['otime'])->endOfDay()->toDateTimeString() : '';
-        // 传参如: 2020-2-22
-        if (!$otime) {
-            $otime = Carbon::tomorrow()->endOfDay()->toDateTimeString();
-            //明天日期
-        }
-        $select = [
-            Db::raw('LEFT (created_at,10) AS created_date'),
-            //创建时间,转xxxx-xx-xx
-            'order_sn',
-            'user_id',
-            // 用户id
-            'order_amount',
-            // 订单金额
-            'real_amount',
-            // 实付金额
-            'status',
-            // 0待支付1已支付2已取消
-            'pay_time',
-            // 付款时间
-            'trade_no',
-        ];
-        // 查询所有数据
-        $result = VipOrderModel::query()->select($select)->where('created_at', '>=', $stime)->where('created_at', '<=', $otime)->orderByRaw('created_date desc')->get()->toArray();
-        // 业务处理统计开始: $data_default 为容器变量,勿赋值,切记!
-        $data_default = [
-            'created_date' => '',
-            // 2020-02-21
-            'order_all' => 0,
-            // 100  创建订单数
-            'order_all_pay' => 0,
-            // 50   支付订单数
-            'user_all' => 0,
-            // 30   下单用户量
-            'user_all_pay' => 0,
-            // 10   支付用户量
-            'amount_all' => 0,
-            // 订单金额(以实付金额为准,咨询过 田七 ), order_amount_all 为订单原始金额
-            'amount_all_pay' => 0,
-            // 真实支付的金额(以实付金额为准,咨询过 田七 )-用户已付款的
-            'user_all_uid_data' => [],
-            // 用户ID集合 - 便于统计用户量
-            'user_all_pay_uid_data' => [],
-            // 付款的用户ID集合 - 便于统计用户量
-            'real_order' => 0,
-            // 订单成功率 = 支付订单/创建订单 (单位%)
-            'real_user' => 0,
-            // 用户成功率 = 支付用户/下单用户 (单位%)
-            'real_other' => 0,
-        ];
-        $data = [];
-        if (!$result) {
-            return json_success($data);
-        }
-        $_now_created_date = '';
-        $k_max = count($result) - 1;
-        // 下标
-        foreach ($result as $k => $v) {
-            if (!$_now_created_date) {
-                // 初始
-                $_now_created_date = $v['created_date'];
-                $i = 0;
-                $data[$i] = $data_default;
-                $data[$i]['created_date'] = $_now_created_date;
-            }
-            if ($_now_created_date != $v['created_date']) {
-                $_now_created_date = $v['created_date'];
-                //第2日时
-                $y = $i;
-                $i++;
-                $data[$i] = $data_default;
-                $data[$i]['created_date'] = $_now_created_date;
-                // 计算各成功率(上一天数据)
-                $data[$y] = self::actionReal($data[$y]);
-            }
-            $data[$i]['order_all']++;
-            $data[$i]['amount_all'] += $v['real_amount'];
-            if (!in_array($v['user_id'], $data[$i]['user_all_uid_data'])) {
-                $data[$i]['user_all_uid_data'][] = $v['user_id'];
-                //同个ID用户仅算1个用户
-            }
-            if ($v['status'] == 1) {
-                // 付款成功的
-                $data[$i]['order_all_pay']++;
-                $data[$i]['amount_all_pay'] += $v['real_amount'];
-                if (!in_array($v['user_id'], $data[$i]['user_all_pay_uid_data'])) {
-                    $data[$i]['user_all_pay_uid_data'][] = $v['user_id'];
-                    //同个ID用户仅算1个用户
-                }
-            }
-            //处理特殊情况-最后条数据时
-            if ($k == $k_max) {
-                $y = $i;
-                $data[$y] = self::actionReal($data[$y]);
-            }
-        }
-        return json_success($data);
-    }
-    /**
-     * 内用 - 业务计算各种成功率 ( 已封装好,勿动 )
-     * @author x.b
-     * @example self::dayListUser()方法在内调这里,业务统计处理
-     */
-    private function actionReal($data = array())
-    {
-        if (!$data) {
-            return $data;
-        }
-        $data['user_all'] = count($data['user_all_uid_data']);
-        $data['user_all_pay'] = count($data['user_all_pay_uid_data']);
-        $data['real_order'] = round(round($data['order_all_pay'] / $data['order_all'], 4) * 100, 2);
-        $data['real_user'] = round(round($data['user_all_pay'] / $data['user_all'], 4) * 100, 2);
-        $data['real_other'] = round($data['order_all_pay'] / $data['user_all'], 2);
-        // 单位:个,表示平均1个人实付多少单
-        // 测试OK-清除业务用户ID集合,此字段不需要返回给H5
-        unset($data['user_all_uid_data']);
-        unset($data['user_all_pay_uid_data']);
-        return $data;
-    }
-    /**
-     * 用户查单列表  ( 返回结构 与 订单列表 一致, 唯一区别: 这里是强制过滤用户已上传支付凭证的)
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example param_json_data string:
-     * {"handshake":"","data":{"page":1,"page_size":5,"search":{"order_sn":"","nick":"","user_id":"","user_code":"","device_type":"","status":"","pay_gate_way":"","is_admin_action":"","stime":"","otime":"","stime_pay":"","otime_pay":""},"order":"created_at","order_sort":"desc"}}
-     * @deprecated 目前,从 支付方式id 等价于 查询出支付通道! pay_gate_way
-     */
-    public function userOrderList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $page = isset($inputData['page']) ? (int) $inputData['page'] : 1;
-        $page_size = isset($inputData['page_size']) ? (int) $inputData['page_size'] : 20;
-        $select = ['vip_order.*', 'user.nick', 'user.id AS user_id', 'user.code AS user_code', 'user.device_type'];
-        $model = Model::query();
-        $order_key = isset($inputData['order']) ? $inputData['order'] : 'id';
-        $order_value = isset($inputData['order_sort']) ? $inputData['order_sort'] : 'desc';
-        if (!$order_key) {
-            $order_key = 'id';
-            //不要信任前端,他可能会传个空字符串过来!
-        }
-        if (!$order_value) {
-            $order_value = 'desc';
-        }
-        // order_sn订单号,status 订单状态, pay_gate_way (支付方式/支付通道), stime 订单创建时间-开始, otime 订单创建时间-结束, stime_pay 订单支付时间-开始, otime_pay 订单支付时间结束  is_admin_action 后台是否查到处理
-        // nick 用户表-用户名,user_id 用户表-用户ID, user_code 用户表-用户邀请码,
-        $search = isset($inputData['search']) ? $inputData['search'] : array();
-        if ($search) {
-            foreach ($search as $k => $v) {
-                if (!strlen((string) $v)) {
-                    continue;
-                }
-                $operator = '=';
-                if ($k == 'user_channel_id' && $v == 'official') {
-                    $v = '';
-                }
-                switch ($k) {
-                    case "nick":
-                    // 用户表-用户名
-                    case "user_code":
-                        // 用户表-用户邀请码
-                        $model->where('user.' . $k, 'like', "{$v}%");
-                        break;
-                    case "user_id":
-                        // 用户表-用户ID
-                        $model->where('user.id', 'like', "{$v}%");
-                        break;
-                    case "stime":
-                        // 自定义-订单开始日期
-                        $model->where('vip_card.created_at', '>=', $v);
-                        break;
-                    case "otime":
-                        // 自定义-订单结束日期
-                        $model->where('vip_card.created_at', '<=', Carbon::parse($v)->endOfDay()->toDateTimeString());
-                        break;
-                    case "stime_pay":
-                        // 自定义-订单支付开始日期
-                        $model->where('vip_card.pay_time', '>=', $v);
-                        break;
-                    case "otime_pay":
-                        // 自定义-订单支付结束日期
-                        $model->where('vip_card.pay_time', '<=', $v);
-                        break;
-                    default:
-                        $model->where('vip_order.' . $k, $operator, $v);
-                }
-            }
-        }
-        $model->where('vip_order.is_user_proof', '1');
-        // 强制过滤,用户已经上传支付凭证的数据
-        $result = $model->select($select)->leftJoin('user', 'vip_order.user_id', '=', 'user.id')->orderBy((string) $order_key, (string) $order_value)->paginate($page_size, ['*'], 'page', $page);
-        //处理图片路径
-        foreach ($result as $v) {
-            $payproof_imgs_lists = array();
-            $img = explode(',', $v->payproof_imgs);
-            $payproof_imgs_lists = $img;
-            //            foreach ($img as $i) {
-            //                $payproof_imgs_lists[] =  make(CommonService::class)->getImageUrl($i, true);
-            //            }
-            $v->payproof_imgs_list = $payproof_imgs_lists;
-            $v->pay_type = OrderConstrant::$messages[$v->pay_type];
-            $v->pay_gate_way = $v->pay_gate_way;
-        }
-        return json_success($result);
-    }
-    /**
-     * 用户查单列表-标记为 已查单
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example param_json_data string:  {"handshake":"","data":{"order_sn":"YV202002242305189073"}}
-     */
-    public function setUserOrder(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['order_sn' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $order_sn = $inputData['order_sn'];
-        $order_info = make(OrderRepository::class)->getOrderInfo($order_sn);
-        if (!$order_info) {
-            return json_fail('订单不存在');
-        }
-        if ($order_info['is_admin_action']) {
-            return json_fail('此订单已标示为已查单,请勿重复操作');
-        }
-        $r = make(OrderRepository::class)->setAdminAction($order_sn, 1);
-        if (!$r) {
-            return json_fail('处理失败');
-        }
-        // 创建管理员日志
-        $oldItem = clone $order_info;
-        $newitem = make(OrderRepository::class)->getOrderInfo($order_sn);
-        $logSubject = "将订单标记为已查单,订单号为:{$order_sn}";
-        $logSvalue = $oldItem->id;
-        $logDbData = ['after_items' => [$newitem->toArray()], 'before_items' => [$oldItem->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success('', '处理成功');
-    }
-    /**
-     * 支付金币
-     * @param ValidatorFactoryInterface $validatorFactory
-     */
-    public function coinsOrder(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'order_sn' => 'nullable', 'user_uid' => 'nullable', 'status' => 'nullable|integer', 'stime' => 'nullable', 'otime' => 'nullable', 'otime_pay' => 'nullable', 'stime_pay' => 'nullable'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $result = CoinsOrderModel::query()->orderByDesc('id')->where(function ($q) use($inputData) {
-            if ($inputData['order_sn']) {
-                $q->where('order_sn', $inputData['order_sn']);
-            }
-            if ($inputData['user_uid']) {
-                $q->where('user_code', $inputData['user_uid']);
-            }
-            if ($inputData['status']) {
-                $q->where('status', $inputData['status']);
-            }
-            if ($inputData['stime'] && $inputData['otime']) {
-                $q->whereBetween('created_at', [Carbon::parse($inputData['stime'])->toDateString(), Carbon::parse($inputData['otime'])->toDateString()]);
-            }
-            if ($inputData['stime_pay'] && $inputData['otime_pay']) {
-                $q->whereBetween('pay_time', [Carbon::parse($inputData['stime_pay'])->toDateString(), Carbon::parse($inputData['otime_pay'])->toDateString()]);
-            }
-        })->paginate((int) $inputData['page_size'], ['*'], 'page', (int) $inputData['page']);
-        return json_success($result);
-    }
-    /**
-     * 金币订单补单
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function coinsAgain(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = [
-            'order_sn' => 'required|string',
-            //支付单号
-            'repair_remark' => 'nullable|string',
-        ];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $orderInfo = make(OrderRepository::class)->getCoinsOrderInfo($inputData['order_sn']);
-        if (empty($orderInfo)) {
-            return json_fail('订单不存在');
-        }
-        if ($orderInfo['status'] == 1) {
-            return json_fail('此订单已处理,请勿重复操作!');
-        }
-        $res = make(OrderRepository::class)->coinsAgain($inputData['order_sn'], $inputData['repair_remark'], $orderInfo['user_id'], $orderInfo['coins']);
-        if (!$res) {
-            return json_fail('补单失败');
-        }
-        $logSubject = "给用户{$orderInfo['user_id']}加金币" . $orderInfo['coins'];
-        $logSvalue = $orderInfo['user_id'];
-        $logDbData = ['after_items' => [], 'before_items' => []];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success('', '操作成功');
-    }
-    /**
-     * 帐变列表
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|OrderChangeListResponse
-     */
-    public function changeList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|integer', 'page_size' => 'required|integer', 'uid' => 'nullable|string', 'username' => 'nullable|string', 'user_uid' => 'nullable|string', 'type' => 'nullable|integer', 'way' => 'nullable|integer'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['created_at', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $res = make(ChangeLogRepository::class)->pushCriteria(new ChangeLogCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        return new OrderChangeListResponse($res);
-    }
-}

+ 0 - 604
runtime/container/proxy/Modules_Manage_Controllers_OriginaController.proxy.php

@@ -1,604 +0,0 @@
-<?php
-
-namespace Modules\Manage\Controllers;
-
-use App\Constants\CommonConstant;
-use App\Repositories\Criterias\GoodsAssessCriteria;
-use App\Repositories\Criterias\GoodsCriteria;
-use App\Repositories\Criterias\OrderLimitCriteria;
-use App\Repositories\Criterias\OriginalClassCriteria;
-use App\Repositories\Criterias\OriginalOrderCriteria;
-use App\Repositories\Criterias\ShopsCriteria;
-use App\Repositories\Criterias\UserShippingAddressCriterias;
-use App\Repositories\GoodsAssessRepository;
-use App\Repositories\OriginalCategoryRepository;
-use App\Repositories\OriginalClassRepository;
-use App\Repositories\OriginalOrderRepository;
-use App\Repositories\OriginalRepository;
-use App\Repositories\ShopsRepository;
-use App\Repositories\UserRepository;
-use App\Repositories\UserShippingAddressRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Manage\Responses\CommonPagesResponse;
-use Modules\Manage\Responses\OriginaAssessListsResponse;
-use Modules\Manage\Responses\OriginaGoodsListsResponse;
-use Modules\Manage\Responses\OriginaOrderListsResponse;
-use Modules\Manage\Responses\PaymentSuccessUidResponse;
-class OriginaController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 分类列表
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|CommonPagesResponse
-     */
-    public function categoryLists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'sttaus' => 'nullable|string', 'name' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['created_at', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page'] ?? 1);
-        $res = make(OriginalClassRepository::class)->pushCriteria(new OriginalClassCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        return new CommonPagesResponse($res);
-    }
-    /**
-     * 添加分类
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse
-     */
-    public function categoryAdd(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['name' => 'required|string', 'status' => 'required|in:1,2', 'type' => 'required|in:1,2', 'sort' => 'required|integer'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $setarr = ['name' => $inputData['name'], 'status' => $inputData['status'], 'type' => $inputData['type'], 'sort' => $inputData['sort']];
-        $result = make(OriginalClassRepository::class)->create($setarr);
-        if (!$result) {
-            return json_fail('添加失败');
-        } else {
-            $logSubject = '添加一个原味分类,分类名字:' . $inputData['name'];
-            $logSvalue = $result->uid;
-            $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new PaymentSuccessUidResponse($result->uid);
-        }
-    }
-    /**
-     * 修改分类
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse
-     */
-    public function categoryEdit(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['name' => 'nullable|string', 'status' => 'nullable|in:1,2', 'type' => 'nullable|in:1,2', 'sort' => 'nullable|integer', 'uid' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $categoryInfo = make(OriginalClassRepository::class)->findBy('uid', $inputData['uid']);
-        if (!$categoryInfo) {
-            return json_fail('该类型不存在!');
-        }
-        $oldCategoryInfo = clone $categoryInfo;
-        if (!empty($inputData['name'])) {
-            $categoryInfo->name = $inputData['name'];
-        }
-        if (!empty($inputData['status'])) {
-            $categoryInfo->status = $inputData['status'];
-        }
-        if (!empty($inputData['type'])) {
-            $categoryInfo->type = $inputData['type'];
-        }
-        if (!empty($inputData['sort'])) {
-            $categoryInfo->sort = $inputData['sort'];
-        }
-        $result = $categoryInfo->save();
-        if (!$result) {
-            return json_fail('修改失败');
-        } else {
-            $logSubject = '修改一个原味分类,名字:' . $oldCategoryInfo->name;
-            $logSvalue = $oldCategoryInfo->uid;
-            $logDbData = ['after_items' => [$categoryInfo->toArray()], 'before_items' => [$oldCategoryInfo->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new PaymentSuccessUidResponse($categoryInfo->uid);
-        }
-    }
-    /**
-     * 删除分类
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse
-     */
-    public function categoryDelete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $categoryInfo = make(OriginalClassRepository::class)->findBy('uid', $inputData['uid']);
-        if (!$categoryInfo) {
-            return json_fail('该类型不存在!');
-        }
-        $oldCategoryInfo = clone $categoryInfo;
-        $result = $categoryInfo->delete();
-        if (!$result) {
-            return json_fail('删除失败');
-        } else {
-            $logSubject = '删除一个类原味分类,名字:' . $oldCategoryInfo->name;
-            $logSvalue = $oldCategoryInfo->manager_id;
-            $logDbData = ['after_items' => [], 'before_items' => [$oldCategoryInfo->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new PaymentSuccessUidResponse($inputData['uid']);
-        }
-    }
-    /**
-     * 评价列表
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|void
-     */
-    public function assessLists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'buy_uid' => 'nullable|string', 'goods_name' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['created_at', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page'] ?? 1);
-        $res = make(GoodsAssessRepository::class)->pushCriteria(new GoodsAssessCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        return new OriginaAssessListsResponse($res);
-    }
-    /**
-     * 删除评论
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse
-     */
-    public function assessDelete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $goodsAssessInfo = make(GoodsAssessRepository::class)->findBy('uid', $inputData['uid']);
-        if (!$goodsAssessInfo) {
-            return json_fail('该评论不存在!');
-        }
-        $oldDoodsAssessInfo = $goodsAssessInfo;
-        $result = $goodsAssessInfo->delete();
-        if (!$result) {
-            return json_fail('删除失败');
-        } else {
-            $logSubject = '删除一个类原味分类,名字:' . $goodsAssessInfo->name;
-            $logSvalue = $oldDoodsAssessInfo->manager_id;
-            $logDbData = ['after_items' => [], 'before_items' => [$oldDoodsAssessInfo->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new PaymentSuccessUidResponse($inputData['uid']);
-        }
-    }
-    /**
-     * 订单列表
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|OriginaOrderListsResponse
-     */
-    public function orderLists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'buy_uid' => 'nullable|string', 'sell_uid' => 'nullable|string', 'order_sn' => 'nullable|string', 'order_status' => 'nullable|in:1,2,3,4,5', 'pay_status' => 'nullable|in:1,2,3', 'redund_status' => 'nullable|in:1,2,3,4', 'goods_name' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['created_at', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page'] ?? 1);
-        $res = make(OriginalOrderRepository::class)->pushCriteria(new OriginalOrderCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        return new OriginaOrderListsResponse($res);
-    }
-    /**
-     * 操作订单
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse
-     */
-    public function orderUpdate(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'required|string', 'order_status' => 'nullable|in:3,4,5', 'redund_status' => 'nullable|in:3,4', 'denial_reason' => 'nullable|string|max:255', 'courier_number' => 'nullable|string', 'courier_firm' => 'nullable|string', 'logistics_info' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $OriginalOrderRep = make(OriginalOrderRepository::class);
-        $orderInfo = $OriginalOrderRep->findBy('uid', $inputData['uid']);
-        if (!$orderInfo) {
-            return json_fail('该订单不存在!');
-        }
-        $oldOrderInfo = clone $orderInfo;
-        $msg = '订单状态改变, 订单号' . $oldOrderInfo->order_sn;
-        if (!empty($inputData['order_status'])) {
-            switch ($inputData['order_status']) {
-                case 3:
-                    $msg = '待发货订单发货,订单号:' . $oldOrderInfo->order_sn;
-                    break;
-                case 4:
-                    $data = ['goods_uid' => $orderInfo->goods_uid, 'buy_uid' => $orderInfo->buy_uid, 'goods_name' => $orderInfo->goods_name, 'order_sn' => $orderInfo->order_sn, 'comment_fraction' => 3, 'comment' => '商品很棒!'];
-                    // 确认收货
-                    $res = $OriginalOrderRep->confirmReceipt($data);
-                    if (!$res) {
-                        return json_fail('确认收货失败');
-                    }
-                    $msg = '待收货订单确认收货,订单号:' . $oldOrderInfo->order_sn;
-                    break;
-            }
-            $orderInfo->order_status = $inputData['order_status'];
-        }
-        if (!empty($inputData['redund_status'])) {
-            switch ($inputData['redund_status']) {
-                case 3:
-                    $msg = '订单退款驳回,订单号:' . $oldOrderInfo->order_sn;
-                    $oldOrderInfo->order_status = 1;
-                    break;
-                case 4:
-                    // 退款
-                    $res = $OriginalOrderRep->refund($oldOrderInfo->toArray());
-                    if (!$res) {
-                        return json_fail('退款失败');
-                    }
-                    $msg = '订单退款确认成功,订单号:' . $oldOrderInfo->order_sn;
-                    break;
-            }
-            $orderInfo->refund_end_time = date('Y-m-d H:i:s');
-            $orderInfo->redund_status = $inputData['redund_status'];
-        }
-        if (!empty($inputData['denial_reason'])) {
-            $orderInfo->denial_reason = $inputData['denial_reason'];
-        }
-        if (!empty($inputData['courier_number'])) {
-            $orderInfo->courier_number = $inputData['courier_number'];
-        }
-        if (!empty($inputData['courier_firm'])) {
-            $orderInfo->courier_firm = $inputData['courier_firm'];
-        }
-        if (!empty($inputData['logistics_info'])) {
-            $orderInfo->logistics_info = $inputData['logistics_info'];
-        }
-        $result = $orderInfo->save();
-        if (!$result) {
-            return json_fail('操作成功');
-        } else {
-            $logSubject = $msg;
-            $logSvalue = $oldOrderInfo->manager_id;
-            $logDbData = ['after_items' => [$orderInfo->toArray()], 'before_items' => [$oldOrderInfo->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new PaymentSuccessUidResponse($inputData['uid']);
-        }
-    }
-    /**
-     * 店铺列表
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function shopsList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['title' => 'nullable|string', 'is_certified' => 'nullable|in:1,2'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['created_at', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page'] ?? 1);
-        $res = make(ShopsRepository::class)->pushCriteria(new ShopsCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        foreach ($res->items() as &$val) {
-            $val->province = substr($val->province, 0, strlen($val->province) - 6);
-            $val->city = substr($val->city, 0, strlen($val->city) - 6);
-            $val->region = substr($val->region, 0, strlen($val->region) - 6);
-            $val->user_nick = $val->user->nick;
-            $val->cover64 = '';
-            unset($val->user);
-        }
-        return json_success($res);
-    }
-    /**
-     * 添加店铺
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse
-     */
-    public function shopsAdd(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['user_uid' => 'required|string', 'title' => 'required|string', 'share_ratio' => 'required|integer', 'credit_value' => 'required|integer', 'sort' => 'required|integer', 'steer_level' => 'required|integer', 'is_certified' => 'required|in:1,2', 'cover' => 'required|string', 'delivery_address' => 'required', 'introduce' => 'required|string', 'tg' => 'nullable|string', 'qq' => 'nullable|string', 'margin' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $userId = make(UserRepository::class)->findBy('code', $inputData['user_uid'], ['id']);
-        if (empty($userId)) {
-            return json_fail('绑定的用户不存在');
-        }
-        $setArr = ['uid' => $inputData['user_uid'], 'title' => $inputData['title'], 'credit_value' => $inputData['credit_value'], 'sort' => $inputData['sort'], 'steer_level' => $inputData['steer_level'], 'is_certified' => $inputData['is_certified'], 'province' => $inputData['delivery_address'][0] . '000000', 'city' => $inputData['delivery_address'][1] . '000000', 'region' => $inputData['delivery_address'][2] . '000000', 'cover' => $inputData['cover'], 'margin' => $inputData['margin'], 'goods_count' => $inputData['goods_count'] ?: 0, 'goods_up_count' => $inputData['goods_up_count'] ?: 0, 'frozen_amount' => $inputData['frozen_amount'] ?: 0, 'amount' => $inputData['amount'] ?: 0, 'introduce' => $inputData['introduce'], 'share_ratio' => $inputData['share_ratio'], 'tg' => $inputData['tg'], 'qq' => $inputData['qq']];
-        $result = make(ShopsRepository::class)->create($setArr);
-        if (!$result) {
-            return json_fail('添加失败');
-        } else {
-            $logSubject = '添加一个店铺:' . $inputData['title'];
-            $logSvalue = $result->uid;
-            $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new PaymentSuccessUidResponse($result->uid);
-        }
-    }
-    /**
-     * 店铺修改
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse
-     */
-    public function shopsEdit(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['user_uid' => 'required|string', 'title' => 'nullable|string', 'share_ratio' => 'nullable|integer', 'credit_value' => 'nullable|integer', 'sort' => 'nullable|integer', 'steer_level' => 'nullable|integer', 'is_certified' => 'nullable|in:1,2', 'cover' => 'nullable|string', 'delivery_address' => 'required', 'goods_count' => 'nullable|integer', 'goods_up_count' => 'nullable|integer', 'introduce' => 'nullable|string', 'tg' => 'nullable|string', 'qq' => 'nullable|string', 'margin' => 'required', 'frozen_amount' => 'required', 'amount' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $shopsInfo = make(ShopsRepository::class)->findBy('uid', $inputData['user_uid']);
-        if (empty($shopsInfo)) {
-            return json_fail('店铺不存在');
-        }
-        $oldShopsInfo = clone $shopsInfo;
-        if (!empty($inputData['title'])) {
-            $shopsInfo->title = $inputData['title'];
-        }
-        if (!empty($inputData['credit_value'])) {
-            $shopsInfo->credit_value = $inputData['credit_value'];
-        }
-        if (!empty($inputData['stor'])) {
-            $shopsInfo->stor = $inputData['stor'];
-        }
-        if (!empty($inputData['steer_level'])) {
-            $shopsInfo->steer_level = $inputData['steer_level'];
-        }
-        if (!empty($inputData['is_certified'])) {
-            $shopsInfo->is_certified = $inputData['is_certified'];
-        }
-        if (!empty($inputData['cover'])) {
-            $shopsInfo->cover = $inputData['cover'];
-        }
-        if (!empty($inputData['is_certified'])) {
-            $shopsInfo->is_certified = $inputData['is_certified'];
-        }
-        if (!empty($inputData['delivery_address'])) {
-            $shopsInfo->province = $inputData['delivery_address'][0] . '000000';
-            $shopsInfo->city = $inputData['delivery_address'][1] . '000000';
-            $shopsInfo->region = $inputData['delivery_address'][2] . '000000';
-        }
-        if (!empty($inputData['share_ratio'])) {
-            $shopsInfo->share_ratio = $inputData['share_ratio'];
-        }
-        if (!empty($inputData['goods_count'])) {
-            $shopsInfo->goods_count = $inputData['goods_count'];
-        }
-        if (!empty($inputData['goods_up_count'])) {
-            $shopsInfo->goods_up_count = $inputData['goods_up_count'];
-        }
-        if (!empty($inputData['introduce'])) {
-            $shopsInfo->introduce = $inputData['introduce'];
-        }
-        if (!empty($inputData['tg'])) {
-            $shopsInfo->tg = $inputData['tg'];
-        }
-        if (!empty($inputData['qq'])) {
-            $shopsInfo->qq = $inputData['qq'];
-        }
-        if (!empty($inputData['margin'])) {
-            $shopsInfo->margin = $inputData['margin'];
-        }
-        $result = $shopsInfo->save();
-        if (!$result) {
-            return json_fail('操作失败');
-        } else {
-            $logSubject = $inputData['title'];
-            $logSvalue = $oldShopsInfo->uid;
-            $logDbData = ['after_items' => [$shopsInfo->toArray()], 'before_items' => [$oldShopsInfo->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new PaymentSuccessUidResponse($inputData['uid']);
-        }
-    }
-    /**
-     * 商品列表
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|OriginaGoodsListsResponse
-     */
-    public function goodsList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['title' => 'nullable|string', 'sell_uid' => 'nullable|string', 'status' => 'nullable|in:1,2,3,4'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['created_at', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page'] ?? 1);
-        $res = make(OriginalRepository::class)->pushCriteria(new GoodsCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        return new OriginaGoodsListsResponse($res);
-    }
-    /**
-     * 添加商品
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse\
-     */
-    public function goodsAdd(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['title' => 'required|string', 'class_uid' => 'required|string', 'shops_uid' => 'required|string', 'sort' => 'required|integer', 'steer_level' => 'required|integer', 'cover' => 'required|string', 'status' => 'required|in:1,2,3,4', 'coins' => 'required|integer', 'original_cions' => 'required|integer', 'member_coins' => 'required|integer', 'stock' => 'required|integer', 'likes' => 'required|integer', 'browse' => 'required|integer', 'number_orders' => 'required|integer', 'appraise' => 'required|integer', 'introduce' => 'required|string', 'photo_address' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $result = make(OriginalRepository::class)->createOne($inputData);
-        if (!$result) {
-            return json_fail('添加失败');
-        } else {
-            $logSubject = '添加一个商品:' . $inputData['title'];
-            $logSvalue = $result->uid;
-            $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new PaymentSuccessUidResponse($result->uid);
-        }
-    }
-    public function goodsEdit(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'required|string', 'title' => 'nullable|string', 'class_uid' => 'required|string', 'shops_uid' => 'required|string', 'sort' => 'nullable|integer', 'steer_level' => 'nullable|integer', 'cover' => 'nullable|string', 'status' => 'nullable|in:1,2,3,4', 'coins' => 'nullable|integer', 'original_cions' => 'nullable|integer', 'member_coins' => 'nullable|integer', 'stock' => 'nullable|integer', 'likes' => 'nullable|integer', 'browse' => 'nullable|integer', 'number_orders' => 'nullable|integer', 'appraise' => 'nullable|integer', 'introduce' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $oldGoodsInfo = [];
-        $goodsInfo = make(OriginalRepository::class)->updateOne($inputData, $oldGoodsInfo);
-        if (!$goodsInfo) {
-            return json_fail('修改失败失败');
-        } else {
-            $logSubject = '修改一个商品:' . $inputData['title'];
-            $logSvalue = $oldGoodsInfo['uid'];
-            $logDbData = ['after_items' => [$goodsInfo], 'before_items' => [$oldGoodsInfo]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new PaymentSuccessUidResponse($goodsInfo->uid);
-        }
-    }
-    /**
-     * 删除商品
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse
-     */
-    public function shopsDelete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $goodsInfo = make(OriginalRepository::class)->findBy('uid', $inputData['uid']);
-        if (empty($goodsInfo)) {
-            return json_fail('商品不存在');
-        }
-        $oldGoodsInfo = clone $goodsInfo;
-        $result = $goodsInfo->delete();
-        if (!$result) {
-            return json_fail('删除失败');
-        } else {
-            $logSubject = '删除一个类原味分类,名字:' . $goodsInfo->title;
-            $logSvalue = $oldGoodsInfo->uid;
-            $logDbData = ['after_items' => [], 'before_items' => [$oldGoodsInfo->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new PaymentSuccessUidResponse($inputData['uid']);
-        }
-    }
-    /**
-     * 收货地址
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function userAddress(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['user_uid' => 'nullable|string', 'name' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['created_at', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page'] ?? 1);
-        $res = make(UserShippingAddressRepository::class)->pushCriteria(new UserShippingAddressCriterias($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        foreach ($res->items() as &$value) {
-            $value->user_nick = $value->user->nick;
-            unset($value->user);
-        }
-        return json_success($res);
-    }
-    /**
-     * 商品所需下拉
-     *
-     * @return mixed
-     */
-    public function getDown()
-    {
-        $res['category'] = make(OriginalCategoryRepository::class)->findAllBy('type', 1, ['uid', 'name'])->keyBy('uid');
-        $res['shops'] = make(ShopsRepository::class)->findAllBy('is_certified', 2, ['uid', 'title'])->keyBy('uid');
-        return json_success($res);
-    }
-}

+ 0 - 262
runtime/container/proxy/Modules_Manage_Controllers_PermissionController.proxy.php

@@ -1,262 +0,0 @@
-<?php
-
-/**
- * 管理权限分配.
- *
- * @author jim <jim458734573@gmail.com>
- * @date   2020-01-23 23:55:52
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Constants\CommonConstant;
-use App\Model\ManagerModel;
-use App\Repositories\Criterias\OrderLimitCriteria;
-use App\Repositories\PermissionResourceRepository;
-use App\Repositories\PermissionRoleRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Manage\Responses\CommonPagesResponse;
-use Modules\Manage\Responses\CommonSuccessPkResponse;
-use Modules\Manage\Responses\PermissionRoleDetailResponse;
-use Modules\Manage\Responses\PermissionRolePagesResponse;
-use Hyperf\DbConnection\Db;
-class PermissionController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 分页列表.
-     * @param  ValidatorFactoryInterface  $validatorFactory
-     * @return mixed|CommonPagesResponse
-     */
-    public function resourceLists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $orders = [['id', 'ASC']];
-        $lists = make(PermissionResourceRepository::class)->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        return new CommonPagesResponse($lists);
-    }
-    /**
-     * 删除.
-     * @param  ValidatorFactoryInterface  $validatorFactory
-     * @return mixed
-     */
-    public function resourceDelete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $item = make(PermissionResourceRepository::class)->find($inputData['id']);
-        if (empty($item)) {
-            return json_fail(trans('common.err_resource_not_found'));
-        }
-        $oldItem = clone $item;
-        $result = $item->delete();
-        if (!$result) {
-            return json_fail('删除失败');
-        } else {
-            $logSubject = '删除一个权限资源,id:' . $oldItem->id;
-            $logSvalue = $oldItem->id;
-            $logDbData = ['after_items' => [], 'before_items' => [$oldItem->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new CommonSuccessPkResponse($inputData['id']);
-        }
-    }
-    /**
-     * 详情角色.
-     * @param  ValidatorFactoryInterface  $validatorFactory
-     * @return mixed
-     */
-    public function roleDetail(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $item = make(PermissionRoleRepository::class)->find($inputData['id']);
-        return new PermissionRoleDetailResponse($item);
-    }
-    /**
-     * 添加角色.
-     * @param  ValidatorFactoryInterface  $validatorFactory
-     * @return mixed
-     */
-    public function roleAdd(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['name' => 'required|max:60', 'permissions' => 'required|array', 'squad' => 'nullable|integer'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        if (isset($inputData['permissions'])) {
-            $permissions = !empty($inputData['permissions']) ? implode(',', $inputData['permissions']) : '';
-        } else {
-            $permissions = '';
-        }
-        if (!isset($inputData['squad'])) {
-            $squad = 1000;
-        } else {
-            $squad = intval($inputData['squad']);
-        }
-        $setarr = ['name' => trim($inputData['name']), 'permissions' => $permissions, 'squad' => $squad];
-        $result = make(PermissionRoleRepository::class)->create($setarr);
-        if (!$result) {
-            return json_fail('创建失败');
-        } else {
-            $logSubject = '添加一个角色, 新名称:' . $result->name;
-            $logSvalue = $result->id;
-            $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new CommonSuccessPkResponse($result->id);
-        }
-    }
-    /**
-     * 修改角色.
-     * @param  ValidatorFactoryInterface  $validatorFactory
-     * @return mixed|CommonSuccessPkResponse
-     */
-    public function roleModify(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required', 'name' => 'required|max:60', 'permissions' => 'required|array', 'squad' => 'nullable|integer'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $item = make(PermissionRoleRepository::class)->find($inputData['id']);
-        if (empty($item)) {
-            return json_fail(trans('common.err_resource_not_found'));
-        }
-        $oldItem = clone $item;
-        if (isset($inputData['permissions'])) {
-            $permissions = !empty($inputData['permissions']) ? implode(',', $inputData['permissions']) : '';
-        } else {
-            $permissions = '';
-        }
-        if (!isset($inputData['squad'])) {
-            $squad = 1000;
-        } else {
-            $squad = intval($inputData['squad']);
-        }
-        $oldName = $item->name;
-        $name = trim($inputData['name']);
-        $item->name = $name;
-        $item->permissions = $permissions;
-        $item->squad = $squad;
-        $result = false;
-        Db::beginTransaction();
-        try {
-            $result = $item->save();
-            if ($result) {
-                if ($name != $oldName) {
-                    // 批量替换冗余的管理角色名称.
-                    $rows = ManagerModel::where('role_id', $inputData['id'])->update(['role_name' => $name]);
-                }
-            }
-            Db::commit();
-        } catch (\Throwable $e) {
-            Db::rollBack();
-        }
-        if (!$result) {
-            return json_fail('修改失败');
-        } else {
-            $logSubject = '修改一个角色, 新名称:' . $item->name;
-            $logSvalue = $item->id;
-            $logDbData = ['after_items' => [$item->toArray()], 'before_items' => [$oldItem->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new CommonSuccessPkResponse($item->id);
-        }
-    }
-    /**
-     * 删除角色.
-     * @param  ValidatorFactoryInterface  $validatorFactory
-     * @return mixed|CommonSuccessPkResponse
-     */
-    public function roleDelete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $item = make(PermissionRoleRepository::class)->find($inputData['id']);
-        if (empty($item)) {
-            return json_fail(trans('common.err_resource_not_found'));
-        }
-        $oldItem = clone $item;
-        $result = $item->delete();
-        if (!$result) {
-            return json_fail('删除失败');
-        } else {
-            $logSubject = '删除一个角色, 名称:' . $oldItem->name;
-            $logSvalue = $oldItem->id;
-            $logDbData = ['after_items' => [], 'before_items' => [$oldItem->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new CommonSuccessPkResponse($inputData['id']);
-        }
-    }
-    /**
-     * 角色页列表.
-     * @param  ValidatorFactoryInterface  $validatorFactory
-     * @return mixed|CommonPagesResponse
-     */
-    public function roleLists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $orders = [['squad', 'DESC'], ['id', 'DESC']];
-        // 注意,单例分页一定要克隆一个(保证前面没用使用到paginate);
-        $lists = make(PermissionRoleRepository::class)->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        return new PermissionRolePagesResponse($lists);
-    }
-    /**
-     * 获取有效树形权限.
-     * @return mixed
-     */
-    public function allTree()
-    {
-        //        $rTree = make(PermissionResourceRepository::class)->getAllEnableTree();
-        $rTree = make(PermissionResourceRepository::class)->getAllEnableTreeName();
-        return json_success($rTree);
-    }
-}

+ 0 - 180
runtime/container/proxy/Modules_Manage_Controllers_StatisticsController.proxy.php

@@ -1,180 +0,0 @@
-<?php
-
-/**
- * 统计相关
- * @author x.b
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Model\ChannelModel;
-use App\Model\CollectionsModel;
-use App\Model\Mongo\StatisticsChannelModel;
-use App\Model\Mongo\StatisticsModel;
-use App\Model\UserModel;
-use Carbon\Carbon;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Psr\SimpleCache\CacheInterface;
-class StatisticsController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 充值相关统计
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function info(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['last_day' => 'required|numeric', 'start_date' => 'date', 'end_date' => 'date'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        if ($inputData['start_date'] && $inputData['end_date']) {
-            $where = ['date' => ['$gte' => $inputData['start_date'], '$lte' => $inputData['end_date']]];
-        } else {
-            $where = ['date' => ['$gt' => Carbon::now()->subDays($inputData['last_day'])->toDateString()]];
-        }
-        $items = make(StatisticsModel::class)->db()->find($where, ['sort' => ['date' => 1]])->toArray();
-        $date = collect($items)->pluck('date');
-        $update = collect($items)->sortByDesc('date')->first()->update;
-        $price = collect($items)->pluck('true_price');
-        $ios_price = collect($items)->pluck('ios_price');
-        $android_price = collect($items)->pluck('android_price');
-        $ios_register = collect($items)->pluck('ios_register');
-        $android_register = collect($items)->pluck('android_register');
-        $vip_register = collect($items)->pluck('vip_register');
-        $normal_register = collect($items)->pluck('normal_register');
-        $all_register = collect($items)->pluck('all_register');
-        $ios_active = collect($items)->pluck('ios_active');
-        $android_active = collect($items)->pluck('android_active');
-        $vip_active = collect($items)->pluck('vip_active');
-        $normal_active = collect($items)->pluck('normal_active');
-        $all_active = collect($items)->pluck('all_active');
-        $order_count = collect($items)->pluck('order_count');
-        $pay_count = collect($items)->pluck('pay_count');
-        $data = ['update' => $update, 'date' => $date, 'price' => $price, 'ios_price' => $ios_price, 'android_price' => $android_price, 'ios_register' => $ios_register, 'android_register' => $android_register, 'vip_register' => $vip_register, 'normal_register' => $normal_register, 'all_register' => $all_register, 'ios_active' => $ios_active, 'android_active' => $android_active, 'vip_active' => $vip_active, 'normal_active' => $normal_active, 'all_active' => $all_active, 'order_count' => $order_count, 'pay_count' => $pay_count];
-        return json_success($data);
-    }
-    /**
-     * 用户相关统计
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function data(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['start_date' => 'date', 'end_date' => 'date'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        if (!$inputData['start_date']) {
-            $inputData['start_date'] = Carbon::now()->firstOfMonth()->toDateString();
-            $inputData['end_date'] = Carbon::now()->endOfMonth()->toDateString();
-        }
-        $data['count'] = ['user' => UserModel::query()->count(), 'ios' => UserModel::query()->where('device_type', 'I')->count(), 'android' => UserModel::query()->where('device_type', 'A')->count(), 'pay' => CollectionsModel::query()->sum('real_amount'), 'ios_pay' => CollectionsModel::query()->where('device_type', 'I')->sum('real_amount'), 'android_pay' => CollectionsModel::query()->where('device_type', 'A')->sum('real_amount')];
-        $where = ['date' => ['$gte' => $inputData['start_date'], '$lte' => $inputData['end_date']]];
-        $data['list'] = make(StatisticsModel::class)->db()->find($where, ['sort' => ['date' => 1]])->toArray();
-        foreach ($data['list'] as $k => $v) {
-            unset($data['list'][$k]['_id'], $data['list'][$k]['update']);
-            $data['list'][$k]['kdj'] = $v['pay_count'] ? round($v['true_price'] / $v['pay_count'], 2) : 0;
-            $data['list'][$k]['day_pay'] = round(round($v['pay_count'] / $v['all_active'], 4) * 100, 2);
-            //根据产品需求,调整为%且保留2位小数
-            $data['list'][$k]['arpu'] = round($v['true_price'] / $v['all_active'], 2);
-        }
-        $count = count($data['list']);
-        $data['list'][$count]['date'] = '汇总';
-        $data['list'][$count]['price'] = (string) collect($data['list'])->pluck('price')->sum();
-        $data['list'][$count]['true_price'] = (string) collect($data['list'])->pluck('true_price')->sum();
-        $data['list'][$count]['ios_price'] = (string) collect($data['list'])->pluck('ios_price')->sum();
-        $data['list'][$count]['android_price'] = (string) collect($data['list'])->pluck('android_price')->sum();
-        $data['list'][$count]['ios_register'] = collect($data['list'])->pluck('ios_register')->sum();
-        $data['list'][$count]['android_register'] = collect($data['list'])->pluck('android_register')->sum();
-        $data['list'][$count]['vip_register'] = collect($data['list'])->pluck('vip_register')->sum();
-        $data['list'][$count]['normal_register'] = collect($data['list'])->pluck('normal_register')->sum();
-        $data['list'][$count]['all_register'] = collect($data['list'])->pluck('all_register')->sum();
-        $data['list'][$count]['ios_active'] = collect($data['list'])->pluck('ios_active')->sum();
-        $data['list'][$count]['android_active'] = collect($data['list'])->pluck('android_active')->sum();
-        $data['list'][$count]['vip_active'] = collect($data['list'])->pluck('vip_active')->sum();
-        $data['list'][$count]['normal_active'] = collect($data['list'])->pluck('normal_active')->sum();
-        $data['list'][$count]['all_active'] = collect($data['list'])->pluck('all_active')->sum();
-        $data['list'][$count]['order_count'] = collect($data['list'])->pluck('order_count')->sum();
-        $data['list'][$count]['pay_count'] = collect($data['list'])->pluck('pay_count')->sum();
-        $data['list'][$count]['kdj'] = $data['list'][$count]['pay_count'] ? round($data['list'][$count]['true_price'] / $data['list'][$count]['pay_count'], 2) : 0;
-        $data['list'][$count]['day_pay'] = round(round($data['list'][$count]['pay_count'] / $data['list'][$count]['all_active'], 4) * 100, 2);
-        $data['list'][$count]['arpu'] = round($data['list'][$count]['true_price'] / $data['list'][$count]['all_active'], 2);
-        return json_success($data);
-    }
-    /**
-     * 渠道相关统计
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function channel(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['last_day' => 'required|numeric', 'channel' => 'required|string', 'start_date' => 'date', 'end_date' => 'date'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        if ($inputData['start_date'] && $inputData['end_date']) {
-            $where = ['date' => ['$gte' => $inputData['start_date'], '$lte' => $inputData['end_date']]];
-        } else {
-            $where = ['date' => ['$gt' => Carbon::now()->subDays($inputData['last_day'])->toDateString()]];
-        }
-        $items = make(StatisticsChannelModel::class)->db()->find($where, ['sort' => ['date' => 1]])->toArray();
-        $date = collect($items)->pluck('date');
-        $data = ['date' => $date, 'reg' => collect($items)->pluck("{$inputData['channel']}_reg"), 'count' => collect($items)->pluck("{$inputData['channel']}_count"), 'price' => collect($items)->pluck("{$inputData['channel']}_price"), 'update' => collect($items)->sortByDesc('date')->first()->update];
-        foreach ($data['reg'] as $k => $v) {
-            if (!$v) {
-                $data['reg'][$k] = 0;
-            }
-            if (!$data['count'][$k]) {
-                $data['count'][$k] = 0;
-            }
-            if (!$data['price'][$k]) {
-                $data['price'][$k] = '0.00';
-            }
-        }
-        return json_success($data);
-    }
-    /**
-     * 渠道相关统计
-     *
-     * @return mixed
-     */
-    public function channelCount()
-    {
-        $channel_list = make(CacheInterface::class)->remember('channel_list', 60 * 60, function () {
-            return ChannelModel::query()->where('status', 1)->pluck('channel');
-        });
-        $channel = [
-            'channel_list' => $channel_list,
-            //渠道列表
-            'channel_count' => count($channel_list),
-            //渠道数量
-            'channel_user_count' => UserModel::query()->whereIn('channel_id', $channel_list)->count(),
-            //渠道注册用户总数
-            'channel_pay_count' => CollectionsModel::query()->whereIn('channel', $channel_list)->count(),
-            //渠道充值用户总数
-            'channel_user_pay' => CollectionsModel::query()->whereIn('channel', $channel_list)->sum('real_amount'),
-            //渠道充值金额
-            'update' => Carbon::now()->toDateTimeString(),
-        ];
-        return json_success($channel);
-    }
-}

+ 0 - 152
runtime/container/proxy/Modules_Manage_Controllers_SysMessageController.proxy.php

@@ -1,152 +0,0 @@
-<?php
-
-namespace Modules\Manage\Controllers;
-
-use App\Constants\CommonConstant;
-use App\Model\ManagerModel;
-use App\Repositories\Criterias\OrderLimitCriteria;
-use App\Repositories\Criterias\SysMessagePagesCriteria;
-use App\Repositories\SysMessageRepository;
-use Carbon\Carbon;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Manage\Responses\CommonPagesResponse;
-class SysMessageController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    public function lists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'uid' => 'nullable|string', 'subject' => 'nullable|string', 'struct_type' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['created_at', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $lists = make(SysMessageRepository::class)->pushCriteria(new SysMessagePagesCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        return new CommonPagesResponse($lists);
-    }
-    public function create(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['subject' => 'required|string|max:255', 'struct_type' => 'required|string', 'content' => 'nullable|array', 'expired_at' => 'nullable'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        if (!empty($inputData['expired_at'])) {
-            if ($inputData['expired_at'] == '0000-00-00 00:00:00') {
-                return json_fail('过期日期有误');
-            }
-            $month1 = intval(substr($inputData['expired_at'], 5, 2));
-            $day1 = intval(substr($inputData['expired_at'], 8, 2));
-            $year1 = intval(substr($inputData['expired_at'], 0, 4));
-            if (!checkdate($month1, $day1, $year1)) {
-                return json_fail('过期时间格式有误');
-            }
-            if (Carbon::parse($inputData['expired_at']) < Carbon::now()) {
-                return json_fail('过期日期必须是当前以后的时间');
-            }
-        }
-        $obj = make(SysMessageRepository::class)->createOne($inputData);
-        if ($obj) {
-            return json_success(['uid' => $obj->uid]);
-        } else {
-            return json_fail('添加系统消息失败');
-        }
-    }
-    public function modify(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'required', 'subject' => 'required|string|max:255', 'struct_type' => 'required|string', 'content' => 'nullable|array', 'expired_at' => 'nullable'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        if (!empty($inputData['expired_at'])) {
-            if ($inputData['expired_at'] == '0000-00-00 00:00:00') {
-                return json_fail('过期时间有误');
-            }
-            $month1 = intval(substr($inputData['expired_at'], 5, 2));
-            $day1 = intval(substr($inputData['expired_at'], 8, 2));
-            $year1 = intval(substr($inputData['expired_at'], 0, 4));
-            if (!checkdate($month1, $day1, $year1)) {
-                return json_fail('过期时间格式有误');
-            }
-            if (Carbon::parse($inputData['expired_at']) < Carbon::now()) {
-                return json_fail('过期日期必须是当前以后的时间');
-            }
-        }
-        $resultInfo = make(SysMessageRepository::class)->updateOne($inputData['uid'], $inputData);
-        if ($resultInfo['is_ok']) {
-            $logSubject = '编辑一个系统消息:' . $resultInfo['new']->subject;
-            $logSvalue = $inputData['uid'];
-            $logDbData = ['after_items' => [$resultInfo['new']->toArray()], 'before_items' => [$resultInfo['old']->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return json_success(['uid' => $inputData['uid']]);
-        } else {
-            return json_fail('编辑系统消息失败');
-        }
-    }
-    public function delete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $uid = data_get($inputData, 'uid', '');
-        $resultInfo = make(SysMessageRepository::class)->deleteOne($uid);
-        if ($resultInfo['is_ok']) {
-            $logSubject = '删除一个系统消息:' . $resultInfo['old']->subject;
-            $logSvalue = $uid;
-            $logDbData = ['after_items' => [], 'before_items' => []];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return json_success(['uid' => $uid]);
-        } else {
-            return json_fail('删除系统消息失败');
-        }
-    }
-    public function batch()
-    {
-        $inputData = $this->getJsonData();
-        $operateName = $inputData['operate_name'] ?? '';
-        switch ($operateName) {
-            case 'delete':
-                $itemPks = $inputData['item_pks'] ?? [];
-                if (!empty($itemPks)) {
-                    $resultInfo = make(SysMessageRepository::class)->deleteMulti($itemPks);
-                    if ($resultInfo['success_uids']) {
-                        $strPks = implode(',', $resultInfo['success_uids']);
-                        $logSubject = '批量删除多个系统消息';
-                        $logSvalue = $strPks;
-                        $logDbData = ['after_items' => [], 'before_items' => []];
-                        $this->log($logSubject, $logSvalue, $logDbData);
-                    }
-                }
-                $data = ['result' => 'success', 'pks' => $itemPks];
-                return json_success($data);
-                break;
-            default:
-                break;
-        }
-        return json_fail('未知操作');
-    }
-}

+ 0 - 140
runtime/container/proxy/Modules_Manage_Controllers_SystemController.proxy.php

@@ -1,140 +0,0 @@
-<?php
-
-/**
- * 系统配置.
- *
- * @author jim <jim458734573@gmail.com>
- * @date   2020-01-31 10:44:33
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Constants\CommonConstant;
-use App\Repositories\ConfigRepoistory;
-use App\Repositories\Criterias\ManagerLogPagesCriteria;
-use App\Repositories\Criterias\OrderLimitCriteria;
-use App\Repositories\ManagerLogRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Manage\Responses\CommonDetailResponse;
-use Modules\Manage\Responses\CommonPagesResponse;
-use Modules\Manage\Responses\CommonSuccessPkResponse;
-use Modules\Manage\Responses\SystemLogPagesResponse;
-class SystemController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    private $configSgroup = 'sys';
-    /**
-     * 读取配置信息.
-     * @return mixed
-     */
-    public function configInfo()
-    {
-        $inputData = $this->getJsonData();
-        $sgroup = !empty($inputData['sgroup']) ? $inputData['sgroup'] : $this->configSgroup;
-        /*$cacheKey = 'config_'. $this->configSgroup;
-          $cache = make(CacheInterface::class);
-          $data = $cache->rememberForever($cacheKey, function () {
-              return make(ConfigRepoistory::class)->pickByKeys([], $this->configSgroup);
-          });*/
-        $data = make(ConfigRepoistory::class)->pickByKeys('', $sgroup);
-        //        $data = make(ConfigRepoistory::class)->get('asdasd', $this->configSgroup, '');
-        return new CommonDetailResponse($data);
-    }
-    /**
-     * 配置保存.
-     * @return mixed
-     */
-    public function configSave()
-    {
-        $inputData = $this->getJsonData();
-        $sgroup = data_get($inputData, 'sgroup', '');
-        $items = data_get($inputData, 'input', []);
-        if (!empty($sgroup) && !empty($items)) {
-            $repo = make(ConfigRepoistory::class);
-            $repo->saveByKeys($items, $sgroup);
-            // 保存后同时更新缓存.
-            $repo->updateConfigCache($sgroup);
-        }
-        // 操作日志.
-        $logSubject = '保存系统配置';
-        $logSvalue = '';
-        $logDbData = ['after_items' => [], 'before_items' => []];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return new CommonSuccessPkResponse('');
-    }
-    /**
-     * 获取所有分组.
-     * @return mixed
-     */
-    public function configType()
-    {
-        $arrData = [];
-        $items = make(ConfigRepoistory::class)->getAllGroup();
-        if ($items->count()) {
-            foreach ($items as $k => $v) {
-                $arrData[$v->sgroup] = $v->sgroup;
-            }
-        }
-        return json_success($arrData);
-    }
-    /**
-     * 配置缓存更新.
-     * @return mixed
-     */
-    public function configUpdateCache()
-    {
-        make(ConfigRepoistory::class)->updateConfigCache($this->configSgroup);
-        //        make(ConfigRepoistory::class)->clearAllCache();
-        // 操作日志.
-        $logSubject = '更新系统配置缓存';
-        $logSvalue = '';
-        $logDbData = ['after_items' => [], 'before_items' => []];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return new CommonSuccessPkResponse('');
-    }
-    /**
-     * 清除所有缓存.
-     * @return CommonSuccessPkResponse
-     */
-    public function clearAllCache()
-    {
-        make(ConfigRepoistory::class)->clearAllCache();
-        // 操作日志.
-        $logSubject = '清楚所有缓存';
-        $logSvalue = '';
-        $logDbData = ['after_items' => [], 'before_items' => []];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return new CommonSuccessPkResponse('');
-    }
-    /**
-     * 管理日志列表.
-     * @return mixed|CommonPagesResponse
-     */
-    public function logLists()
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'username' => 'nullable|max:60', 'nick' => 'nullable|max:60', 'subject' => 'nullable|max:700', 'module' => 'nullable|max:30', 'ip' => 'nullable|max:40'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $orders = [['created_at', 'DESC']];
-        // 注意,单例分页一定要克隆一个(保证前面没用使用到paginate);
-        $lists = make(ManagerLogRepository::class)->pushCriteria(new ManagerLogPagesCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        return new SystemLogPagesResponse($lists);
-    }
-}

+ 0 - 282
runtime/container/proxy/Modules_Manage_Controllers_TagController.proxy.php

@@ -1,282 +0,0 @@
-<?php
-
-/**
- * 标签仓库.
- *
- * @author nj <nj@gmail.com>
- * @date   2020-01-27 17:34:43
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Constants\CommonConstant;
-use App\Repositories\Criterias\OrderLimitCriteria;
-use App\Repositories\Criterias\TagCategoryPagesCriteria;
-use App\Repositories\Criterias\TagPagesCriteria;
-use App\Repositories\TagCategoryRepository;
-use App\Repositories\TagRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Manage\Responses\CommonDetailResponse;
-use Modules\Manage\Responses\CommonPagesResponse;
-use Modules\Manage\Responses\CommonSuccessPkResponse;
-class TagController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    public function lists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'id' => 'nullable|numeric', 'name' => 'nullable|max:60', 'category_id' => 'nullable|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['created_at', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $lists = make(TagRepository::class)->pushCriteria(new TagPagesCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        return new CommonPagesResponse($lists);
-    }
-    public function detail(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $id = intval(data_get($inputData, 'id', 0));
-        $repo = make(TagRepository::class);
-        $item = $repo->find($id);
-        if (!$item) {
-            return json_fail('数据不存在');
-        }
-        return new CommonDetailResponse($item);
-    }
-    public function add(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['name' => 'required|max:120', 'category_id' => 'required|numeric', 'squad' => 'nullable|numeric', 'module' => 'nullable|max:60', 'svalue' => 'nullable|max:64'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $name = strval(trim(data_get($inputData, 'name', '')));
-        $categoryId = intval(data_get($inputData, 'category_id', 0));
-        $squad = intval(data_get($inputData, 'squad', 1000));
-        $module = strval(data_get($inputData, 'module', ''));
-        $svalue = strval(data_get($inputData, 'svalue', ''));
-        $repo = make(TagRepository::class);
-        if ($repo->isExistsRelationModule($name, $module)) {
-            return json_fail('相同模块下已经存在同样的标签名称');
-        }
-        $setarr = ['name' => $name, 'category_id' => $categoryId, 'squad' => $squad, 'module' => $module, 'svalue' => $svalue];
-        $result = make(TagRepository::class)->create($setarr);
-        if (!$result) {
-            return json_fail('创建失败');
-        } else {
-            $logSubject = '添加一个标签,名称:' . $name;
-            $logSvalue = $result->id;
-            $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
-            $this->log($logSubject, $logSvalue, $logDbData);
-        }
-        return new CommonSuccessPkResponse($result->id);
-    }
-    public function modify(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|numeric', 'name' => 'required|max:120', 'category_id' => 'required|numeric', 'squad' => 'nullable|numeric', 'module' => 'nullable|max:60', 'svalue' => 'nullable|max:64'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $id = intval(data_get($inputData, 'id', 0));
-        $name = strval(trim(data_get($inputData, 'name', '')));
-        $categoryId = intval(data_get($inputData, 'category_id', 0));
-        $squad = intval(data_get($inputData, 'squad', 1000));
-        $module = strval(data_get($inputData, 'module', ''));
-        $svalue = strval(data_get($inputData, 'svalue', ''));
-        $repo = make(TagRepository::class);
-        $item = $repo->find($id);
-        if (!$item) {
-            return json_fail('数据不存在');
-        }
-        $repo = make(TagRepository::class);
-        if ($repo->isExistsRelationModule($name, $module, $id)) {
-            return json_fail('相同模块下已经存在同样的标签名称');
-        }
-        $oldItem = clone $item;
-        $item->name = $name;
-        $item->category_id = $categoryId;
-        $item->squad = $squad;
-        $item->module = $module;
-        $item->svalue = $svalue;
-        $result = $item->save();
-        if (!$result) {
-            return json_fail('修改失败');
-        } else {
-            $logSubject = '修改一个标签,名称:' . $name;
-            $logSvalue = $item->id;
-            $logDbData = ['after_items' => [$item->toArray()], 'before_items' => [$oldItem->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-        }
-        return new CommonSuccessPkResponse($oldItem->id);
-    }
-    public function delete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $id = intval(data_get($inputData, 'id', 0));
-        $repo = make(TagRepository::class);
-        $item = $repo->find($id);
-        if (!$item) {
-            return json_fail('数据不存在');
-        }
-        $oldItem = clone $item;
-        $result = $item->delete();
-        if (!$result) {
-            return json_fail('删除失败');
-        } else {
-            $logSubject = '删除一个标签,名称:' . $oldItem->name;
-            $logSvalue = $oldItem->id;
-            $logDbData = ['after_items' => [], 'before_items' => [$oldItem->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new CommonSuccessPkResponse($inputData['id']);
-        }
-    }
-    public function categoryLists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'id' => 'nullable|numeric', 'name' => 'nullable|max:60'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['created_at', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $lists = make(TagCategoryRepository::class)->pushCriteria(new TagCategoryPagesCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        return new CommonPagesResponse($lists);
-    }
-    public function categoryDetail(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $id = intval(data_get($inputData, 'id', 0));
-        $repo = make(TagCategoryRepository::class);
-        $item = $repo->find($id);
-        if (!$item) {
-            return json_fail('数据不存在');
-        }
-        return new CommonDetailResponse($item);
-    }
-    public function categoryAdd(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['name' => 'required|max:120', 'squad' => 'nullable|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $name = strval(trim(data_get($inputData, 'name', '')));
-        $squad = intval(data_get($inputData, 'squad', 1000));
-        $setarr = ['name' => $name, 'squad' => $squad];
-        $result = make(TagCategoryRepository::class)->create($setarr);
-        if (!$result) {
-            return json_fail('创建失败');
-        } else {
-            $logSubject = '添加一个标签分类,名称:' . $name;
-            $logSvalue = $result->id;
-            $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
-            $this->log($logSubject, $logSvalue, $logDbData);
-        }
-        return new CommonSuccessPkResponse($result->id);
-    }
-    public function categoryModify(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|numeric', 'name' => 'required|max:120', 'squad' => 'nullable|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $id = intval(data_get($inputData, 'id', 0));
-        $name = strval(trim(data_get($inputData, 'name', '')));
-        $squad = intval(data_get($inputData, 'squad', 1000));
-        $repo = make(TagCategoryRepository::class);
-        $item = $repo->find($id);
-        if (!$item) {
-            return json_fail('数据不存在');
-        }
-        $oldItem = clone $item;
-        $item->name = $name;
-        $item->squad = $squad;
-        $result = $item->save();
-        if (!$result) {
-            return json_fail('修改失败');
-        } else {
-            $logSubject = '修改一个标签分类,名称:' . $name;
-            $logSvalue = $item->id;
-            $logDbData = ['after_items' => [$item->toArray()], 'before_items' => [$oldItem->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-        }
-        return new CommonSuccessPkResponse($oldItem->id);
-    }
-    public function categoryDelete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $id = intval(data_get($inputData, 'id', 0));
-        $repo = make(TagCategoryRepository::class);
-        $item = $repo->find($id);
-        if (!$item) {
-            return json_fail('数据不存在');
-        }
-        $oldItem = clone $item;
-        $result = $item->delete();
-        if (!$result) {
-            return json_fail('删除失败');
-        } else {
-            $logSubject = '删除一个标签分类,名称:' . $oldItem->name;
-            $logSvalue = $oldItem->id;
-            $logDbData = ['after_items' => [], 'before_items' => [$oldItem->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new CommonSuccessPkResponse($inputData['id']);
-        }
-    }
-}

+ 0 - 81
runtime/container/proxy/Modules_Manage_Controllers_TaskController.proxy.php

@@ -1,81 +0,0 @@
-<?php
-
-namespace Modules\Manage\Controllers;
-
-use App\Constants\CommonConstant;
-use App\Repositories\UserTaskRepoistory;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Manage\Responses\CommonPagesResponse;
-use Modules\Manage\Responses\PaymentSuccessUidResponse;
-class TaskController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 任务列表
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|CommonPagesResponse
-     */
-    public function lists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page']);
-        $lists = make(UserTaskRepoistory::class)->paginate($pageSize, ['*'], $page);
-        return new CommonPagesResponse($lists);
-    }
-    /**
-     * 修改任务
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse
-     */
-    public function update(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|integer', 'title' => 'required|string', 'subtitle' => 'required|string', 'jump_link' => 'required|string', 'is_add_up' => 'nullable|integer', 'reward' => 'required|string', 'task_condition' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $taskInfo = make(UserTaskRepoistory::class)->find($inputData['id']);
-        if (empty($taskInfo)) {
-            return json_fail(trans('common.err_resource_not_found'));
-        }
-        $oldTaskInfo = clone $taskInfo;
-        $taskInfo->title = $inputData['title'];
-        $taskInfo->subtitle = $inputData['subtitle'];
-        $taskInfo->jump_link = $inputData['jump_link'];
-        $taskInfo->is_add_up = $inputData['is_add_up'] ?? 0;
-        $taskInfo->reward = $inputData['reward'];
-        $taskInfo->task_condition = $inputData['task_condition'] ?? '';
-        $result = $taskInfo->save();
-        if (!$result) {
-            return json_fail('修改失败');
-        } else {
-            $logSubject = '修改了任务:' . $taskInfo->title;
-            $logSvalue = $taskInfo->id;
-            $logDbData = ['after_items' => [$taskInfo->toArray()], 'before_items' => [$oldTaskInfo->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new PaymentSuccessUidResponse($taskInfo->id);
-        }
-    }
-}

+ 0 - 38
runtime/container/proxy/Modules_Manage_Controllers_TopicController.proxy.php

@@ -1,38 +0,0 @@
-<?php
-
-/**
- * 话题控制器.
- *
- * @author jim <jim458734573@gmail.com>
- * @date   2020-01-29 10:15:03
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-class TopicController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    public function lists()
-    {
-    }
-    public function detail()
-    {
-    }
-    public function delete()
-    {
-    }
-    public function changeStatus()
-    {
-    }
-    public function batch()
-    {
-    }
-}

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

@@ -1,248 +0,0 @@
-<?php
-
-/**
- * 视频-标签管理
- * @author x.b
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Constants\VideoConstant;
-use App\Model\TypeModel as Model;
-use App\Model\TypeVideoModel;
-use Hyperf\DbConnection\Db;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Psr\SimpleCache\CacheInterface;
-class TypeController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 列表
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example param_json_data string:  {"handshake":"","data":{"page":1,"page_size":20,"search":{"id":"","title":"","status":""}}}​
-     * // withCount('video')方法, 统计 type_video表中使用type_id的总数, 统计别名为video_count
-     *   $result = $model->select($select)->orderBy('id', 'desc')->withCount('video')->paginate($page_size, ['*'], 'page', $page);
-     *
-     *   select *, (select count(*) from `type_video` where `type`.`id` = `type_video`.`type_id`) as `video_count` from `type` order by `id` desc limit 20 offset 0 [] []
-     */
-    public function lists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'];
-        $page_size = $inputData['page_size'];
-        $select = ['*'];
-        $model = Model::query();
-        $search = isset($inputData['search']) ? $inputData['search'] : array();
-        if ($search) {
-            foreach ($search as $k => $v) {
-                if (!strlen((string) $v)) {
-                    continue;
-                }
-                switch ($k) {
-                    case "title":
-                        $model->where($k, 'like', "{$v}%");
-                        break;
-                    default:
-                        $model->where($k, $v);
-                }
-            }
-        }
-        $result = $model->select($select)->orderBy('id', 'desc')->withCount('video')->withCount('upvideo')->paginate($page_size, ['*'], 'page', $page);
-        return json_success($result);
-    }
-    /**
-     * 新增
-     * @return mixed
-     * @example param_json_data string: {"handshake":"","data":{"title":"演示标签","cover":"","status":1,"sort":0}}
-     */
-    public function add(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['title' => 'required|max:60', 'sort' => 'required|numeric', 'status' => 'required|numeric', 'cover' => 'nullable|string', 'is_hot' => 'nullable|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $title = isset($inputData['title']) ? $inputData['title'] : '';
-        $check = Model::query()->where('title', $title)->first();
-        if ($check) {
-            return json_fail('此视频标签已存在,请更换一个');
-        }
-        $data = array('title' => $title, 'cover' => isset($inputData['cover']) ? $inputData['cover'] : '', 'status' => $inputData['status'], 'sort' => $inputData['sort'], 'is_hot' => intval($inputData['is_hot']));
-        $data = action_data($data);
-        $result = Model::query()->create($data);
-        if (!$result) {
-            return json_fail('创建失败');
-        }
-        $this->clearCache();
-        // 创建管理员日志
-        $logSubject = '添加一个视频标签,名称:' . $data['title'];
-        $logSvalue = $result->id;
-        $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result, '创建成功');
-    }
-    /**
-     * 编辑
-     * @return mixed
-     * @example param_json_data string: {"handshake":"","data":{"id":"58","title":"演示标签22","cover":"","status":1,"sort":0}}
-     */
-    public function update(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = [
-            'id' => 'required|numeric',
-            'title' => 'nullable|max:60',
-            'sort' => 'nullable|numeric',
-            'status' => 'nullable|int:1,2',
-            //2-禁用(移除) 1-正常(启用)
-            'cover' => 'nullable|string',
-            //封面路径
-            'is_hot' => 'nullable|int',
-            'description' => 'nullable',
-        ];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $id = $inputData['id'];
-        $title = $inputData['title'] ?? '';
-        $old_info = Model::query()->where('id', $id)->first();
-        if (!$old_info) {
-            return json_fail('视频标签不存在');
-        }
-        if ($title) {
-            $check = Model::query()->where('title', $title)->first();
-            if ($check) {
-                if ($check->id != $id) {
-                    return json_fail('此视频标题已存在,请更换一个标题');
-                }
-            }
-        }
-        $data = [
-            'title' => $inputData['title'] ?? '',
-            'sort' => $inputData['sort'] ?? '',
-            'status' => $inputData['status'] ?? '',
-            //2-禁用(移除) 1-正常(启用)
-            'cover' => $inputData['cover'] ?? '',
-            //封面路径
-            'is_hot' => intval($inputData['is_hot']),
-            'description' => $inputData['description'] ?? '',
-        ];
-        $data = action_data($data);
-        $result = Model::query()->where('id', $id)->update($data);
-        if (!$result) {
-            return json_fail('操作失败');
-        }
-        $this->clearCache();
-        // 创建管理员日志
-        $oldItem = clone $old_info;
-        $newItem = Model::query()->where('id', $id)->first();
-        $logSubject = '修改视频标签,id为' . $id;
-        $logSvalue = $id;
-        $logDbData = ['after_items' => [$newItem->toArray()], 'before_items' => [$oldItem->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result, '操作成功');
-    }
-    /**
-     * 编辑
-     * @return mixed
-     * @example param_json_data string: {"handshake":"","data":{"type_id":"58"}}
-     */
-    public function delete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['type_id' => 'required|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $id = $inputData['type_id'];
-        $old_info = Model::query()->where('id', $id)->first();
-        if (!$old_info) {
-            return json_fail('视频标签不存在');
-        }
-        Db::beginTransaction();
-        $result = Model::query()->where('id', $id)->delete();
-        $result2 = TypeVideoModel::query()->where('type_id', $id)->delete();
-        if (!$result || !$result2) {
-            Db::rollBack();
-            return json_fail('操作失败');
-        }
-        Db::commit();
-        $this->clearCache();
-        // 创建管理员日志
-        $oldItem = clone $old_info;
-        $newItem = Model::query()->where('id', $id)->first();
-        $logSubject = '删除视频标签,id为' . $id;
-        $logSvalue = $id;
-        $logDbData = ['after_items' => [], 'before_items' => [$oldItem->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result, '操作成功');
-    }
-    public function info()
-    {
-        $data['type'] = Model::query()->select(['id', 'title'])->orderByRaw('CONVERT (title USING gbk) COLLATE gbk_chinese_ci ASC')->get();
-        $data['from'] = VideoConstant::$from;
-        return json_success($data, '操作成功');
-    }
-    public function clearCache()
-    {
-        $this->clearCreatorCache();
-        return make(CacheInterface::class)->delete('tag');
-    }
-    /**
-     * 切换状态.
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function switchStatus(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|numeric', 'status' => 'nullable|int:1,2'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $id = intval(data_get($inputData, 'id', 0));
-        $status = intval(data_get($inputData, 'status', 0));
-        $item = Model::query()->where(['id' => $id])->first();
-        if (empty($item)) {
-            return json_fail('无此标签');
-        }
-        if ($item->status == $status) {
-            return json_success(['id' => $id]);
-        }
-        $item->status = $status;
-        $result = $item->save();
-        if ($result) {
-            return json_success(['id' => $id]);
-        } else {
-            return json_fail('修改失败');
-        }
-    }
-    /**
-     * 清理创作者tags缓存.
-     * @throws \Psr\SimpleCache\InvalidArgumentException
-     */
-    protected function clearCreatorCache()
-    {
-        $cacheKey = 'creator_tags';
-        $cacheRepo = make(CacheInterface::class);
-        $cacheRepo->delete($cacheKey);
-    }
-}

+ 0 - 61
runtime/container/proxy/Modules_Manage_Controllers_UploadController.proxy.php

@@ -1,61 +0,0 @@
-<?php
-
-/**
- * 上传图片/视频相关
- * @author x.b
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Model\ConfigModel;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-class UploadController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 获取上传接口的域
-     * @return mixed
-     * @param nothing
-     */
-    public function getDomain()
-    {
-        $skey = 'upload_url';
-        $select = ['svalue AS url'];
-        $result = ConfigModel::query()->select($select)->where('skey', $skey)->first();
-        if (!$result) {
-            $result = ['url' => ''];
-        }
-        return json_success($result);
-    }
-    /**
-    * 开始上传图片和视频-备注
-    * 1.
-           注意事项:
-           1. 先从获取上传域名地址接口:   /manage/api/upload/get_domain   即 self::getDomain();
-           成功请求后, 返回:
-           ```
-           {
-               "code": 200,
-               "message": "操作成功",
-               "data": {
-               "url": "http://192.168.1.186:8101/upload"
-           },
-           "handshake": ""
-           }
-           ``  `拿到 url 地址, 然后 在去请求 图片上传接口:
-    
-           2. 请求图片上传实例,则是
-    
-           http://192.168.1.186:8101/upload?dir=icon&platform=I&timestamp=1571992843&sign=BF02
-    
-           请求成功后,会回返 上传成功后的加密图片地址,  在把那地址 原样 给传参给其它接口,进行图片上传 和 视频上传
-    */
-}

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

@@ -1,248 +0,0 @@
-<?php
-
-namespace Modules\Manage\Controllers;
-
-use App\Constants\CommonConstant;
-use App\Repositories\Criterias\OrderLimitCriteria;
-use App\Repositories\Criterias\UsdtChainLimitCriteria;
-use App\Repositories\UsdtChainRepository;
-use App\Repositories\UsdtTypeRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Manage\Responses\CommonPagesResponse;
-use Modules\Manage\Responses\CommonSuccessPkResponse;
-use Modules\Manage\Responses\PaymentSuccessUidResponse;
-class UsdtController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * usdt类型列表
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|CommonPagesResponse
-     */
-    public function lists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['id', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page'] ?? 1);
-        $res = make(UsdtTypeRepository::class)->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        return new CommonPagesResponse($res);
-    }
-    /**
-     * 新增usdt类型
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|CommonSuccessPkResponse
-     */
-    public function add(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['name' => 'required|string', 'code' => 'required|string', 'chain_type' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $setarr = ['name' => $inputData['name'], 'code' => $inputData['code'], 'chain_type' => $inputData['chain_type']];
-        $result = make(UsdtTypeRepository::class)->create($setarr);
-        if (!$result) {
-            return json_fail('创建失败');
-        } else {
-            $logSubject = '添加一个新的usdt类型:' . $inputData['name'] . '-' . $inputData['code'];
-            $logSvalue = $result->id;
-            $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new CommonSuccessPkResponse($result->uid);
-        }
-    }
-    /**
-     * 修改usdt类型
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     */
-    public function update(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['name' => 'nullable|string', 'code' => 'nullable|string', 'status' => 'nullable|in:1,2', 'chain_type' => 'nullable|string', 'uid' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $usdtTypeInfo = make(UsdtTypeRepository::class)->findBy('uid', $inputData['uid']);
-        if (!$usdtTypeInfo) {
-            return json_fail('该支付类型不存在!');
-        }
-        $oldUsdtTypeInfo = clone $usdtTypeInfo;
-        if (!empty($inputData['name'])) {
-            $usdtTypeInfo->name = $inputData['name'];
-        }
-        if (!empty($inputData['code'])) {
-            $usdtTypeInfo->code = $inputData['code'];
-        }
-        if (!empty($inputData['status'])) {
-            $usdtTypeInfo->status = $inputData['status'];
-        }
-        if (!empty($inputData['chain_type'])) {
-            $usdtTypeInfo->chain_type = $inputData['chain_type'];
-        }
-        if (!$usdtTypeInfo->save()) {
-            return json_fail('修改失败!');
-        } else {
-            $logSubject = '修改usdt类型:' . $oldUsdtTypeInfo->name;
-            $logSvalue = $usdtTypeInfo->id;
-            $logDbData = ['after_items' => [$usdtTypeInfo->toArray()], 'before_items' => [$oldUsdtTypeInfo->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-        }
-        return new CommonSuccessPkResponse($oldUsdtTypeInfo->id);
-    }
-    /**
-     * usdt支付链列表
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|CommonPagesResponse
-     */
-    public function chainLists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int', 'is_lock' => 'nullable|in:1,2', 'chain_address' => 'nullable', 'usdt_type_uid' => 'nullable'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $orders = [['id', 'DESC']];
-        $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
-        if ($pageSize > 500) {
-            $pageSize = CommonConstant::PAGE_SIZE;
-        }
-        $page = format_page($inputData['page'] ?? 1);
-        $res = make(UsdtChainRepository::class)->pushCriteria(new UsdtChainLimitCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
-        return new CommonPagesResponse($res);
-    }
-    /**
-     * usdt支付链添加
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|PaymentSuccessUidResponse
-     */
-    public function chainAdd(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['usdt_type_uid' => 'required|string', 'chain_address' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $setarr = ['usdt_type_uid' => $inputData['usdt_type_uid'], 'chain_address' => $inputData['chain_address']];
-        $result = make(UsdtChainRepository::class)->create($setarr);
-        if (!$result) {
-            return json_fail('添加usdt支付链失败');
-        } else {
-            $logSubject = '添加了一个usdt支付链:' . $inputData['chain_address'];
-            $logSvalue = $result->id;
-            $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new PaymentSuccessUidResponse($result->manager_id);
-        }
-    }
-    /**
-     * usdt支付链修改
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|CommonSuccessPkResponse
-     */
-    public function chainUpdate(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'required|string', 'usdt_type_uid' => 'nullable|string', 'chain_address' => 'nullable|string', 'is_lock' => 'nullable|in:1,2'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $usdtChainInfo = make(UsdtChainRepository::class)->findBy('uid', $inputData['uid']);
-        if (!$usdtChainInfo) {
-            return json_fail('该usdt支付链接不存在!');
-        }
-        $oldUsdtChainInfo = $usdtChainInfo;
-        if (!empty($inputData['usdt_type_uid'])) {
-            $usdtChainInfo->usdt_type_uid = $inputData['usdt_type_uid'];
-        }
-        if (!empty($inputData['chain_address'])) {
-            $usdtChainInfo->chain_address = $inputData['chain_address'];
-        }
-        if (!empty($inputData['is_lock'])) {
-            $usdtChainInfo->is_lock = $inputData['is_lock'];
-        }
-        $result = $usdtChainInfo->save();
-        if (!$result) {
-            return json_fail('修改失败');
-        } else {
-            $logSubject = '修改usdt链:' . $usdtChainInfo->chain_address;
-            $logSvalue = $usdtChainInfo->id;
-            $logDbData = ['after_items' => [$usdtChainInfo->toArray()], 'before_items' => [$oldUsdtChainInfo->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-        }
-        return new CommonSuccessPkResponse($usdtChainInfo->id);
-    }
-    /**
-     * usdt支付链删除
-     *
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed|CommonSuccessPkResponse
-     */
-    public function chainDelete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['uid' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $usdtChainInfo = make(UsdtChainRepository::class)->find($inputData['id']);
-        if (!$usdtChainInfo) {
-            return json_fail('该usdt支付链接不存在!');
-        }
-        $oldUsdtChainInfo = $usdtChainInfo;
-        $result = $usdtChainInfo->delete();
-        if (!$result) {
-            return json_fail('删除失败');
-        } else {
-            $logSubject = '删除usdt支付链:' . $oldUsdtChainInfo->chain_address;
-            $logSvalue = $oldUsdtChainInfo->id;
-            $logDbData = ['after_items' => [], 'before_items' => [$oldUsdtChainInfo->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            return new CommonSuccessPkResponse($inputData['id']);
-        }
-    }
-    /**
-     * usdt类型下拉
-     *
-     * @return CommonPagesResponse
-     */
-    public function usdtTypeDown()
-    {
-        $res = make(UsdtTypeRepository::class)->all(['name', 'uid'])->keyBy('uid');
-        return new CommonPagesResponse($res);
-    }
-}

+ 0 - 504
runtime/container/proxy/Modules_Manage_Controllers_UserController.proxy.php

@@ -1,504 +0,0 @@
-<?php
-
-/**
- * 用户管理
- * @author x.b
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Constants\ChangeLogConstant;
-use App\Exception\ApiException;
-use App\Model\Mongo\SendCardHistoryModel;
-use App\Model\VipOrderModel;
-use App\Repositories\Service\QueueService;
-use App\Repositories\UserRepository as UserRepository;
-use App\Model\CoinsLogModel;
-use App\Model\VipCardModel;
-use App\Model\UserModel as Model;
-use Carbon\Carbon;
-use Hyperf\DbConnection\Db;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use App\Repositories\MessageRepository;
-class UserController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 详细
-     * @param yes id int $id 用户ID 如 100
-     * @return mixed
-     * @example param_json_data string: {"handshake":"","data":{"id":14550388}}
-     */
-    public function detail(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $id = $inputData['id'];
-        $select = ['*'];
-        $model = Model::query();
-        $result = $model->select($select)->where('id', $id)->first();
-        if (!$result) {
-            return json_fail('用户不存在');
-        }
-        // 查他的上级邀请人的名字
-        $result['parent_nick'] = '';
-        if ($result['parent_uid']) {
-            $select = ['nick'];
-            $r = Model::query()->select($select)->where('code', $result['parent_uid'])->first();
-            if ($r) {
-                $result['parent_nick'] = $r['nick'];
-            }
-        }
-        $userRepo = make(UserRepository::class);
-        $userDataInfo = $userRepo->getUserInfoData($result['code']);
-        $result['qrcode'] = $userDataInfo['account_qrcode_content'];
-        $orderCount = VipOrderModel::where(['user_code' => $result['code']])->count();
-        $payCount = VipOrderModel::where(['user_code' => $result['code']])->where(['status' => 1])->count();
-        $result['order_count'] = $orderCount;
-        $result['pay_count'] = $payCount;
-        return json_success($result);
-    }
-    /**
-     * 列表
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example param_json_data string:  {"handshake":"","data":{"page":1,"page_size":5,"search":{"nick":"用户CH3J30","stime":"","otime":""},"order":"created_at","order_sort":"desc"}}
-     */
-    public function list(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $page = isset($inputData['page']) ? (int) $inputData['page'] : 1;
-        $page_size = isset($inputData['page_size']) ? (int) $inputData['page_size'] : 20;
-        $select = ['*'];
-        $model = Model::query();
-        $order_key = isset($inputData['order']) ? $inputData['order'] : 'id';
-        $order_value = isset($inputData['order_sort']) ? $inputData['order_sort'] : 'desc';
-        if (!$order_key) {
-            $order_key = 'id';
-            //不要信任前端,他可能会传个空字符串过来!
-        }
-        if (!$order_value) {
-            $order_value = 'desc';
-        }
-        $search = isset($inputData['search']) ? $inputData['search'] : array();
-        if ($search) {
-            foreach ($search as $k => $v) {
-                if (!strlen((string) $v)) {
-                    continue;
-                }
-                $operator = '=';
-                if ($k == 'channel_id' && $v == 'official') {
-                    // 官方代表空
-                    $v = "";
-                }
-                if ($k == 'max_view') {
-                    preg_match('/^(=|>|<)(\\d{1,10})$/', $v, $matches);
-                    if (isset($matches[2])) {
-                        $operator = $matches[1];
-                        $v = $matches[2];
-                    }
-                }
-                switch ($k) {
-                    case "nick":
-                    // 用户名
-                    case "mobile":
-                        // 手机号
-                        $model->where($k, 'like', "{$v}%");
-                        break;
-                    case "stime":
-                        // 自定义-开始日期
-                        $model->where('created_at', '>=', $v);
-                        break;
-                    case "otime":
-                        // 自定义-结束日期
-                        $model->where('created_at', '<=', Carbon::parse($v)->endOfDay()->toDateTimeString());
-                        break;
-                    default:
-                        $model->where($k, $operator, $v);
-                }
-            }
-        }
-        $result = $model->select($select)->orderBy((string) $order_key, (string) $order_value)->paginate($page_size, ['*'], 'page', $page);
-        return json_success($result);
-    }
-    /**
-     * 删除
-     */
-    public function delete()
-    {
-    }
-    /**
-     * 更新
-     * @return mixed
-     * @example param_json_data string: {"handshake":"","data":{"id":14550388,"status":"1"}}
-     */
-    public function update(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $id = $inputData['id'];
-        $status = isset($inputData['status']) ? $inputData['status'] : '';
-        if ($status) {
-            if (!in_array($status, array(1, 2, 3))) {
-                return json_fail('请按文档正确传参,用户的状态值');
-            }
-        }
-        $user_info = Model::query()->where('id', $id)->first();
-        if (!$user_info) {
-            return json_fail('用户不存在');
-        }
-        $data = array();
-        if (isset($inputData['nick'])) {
-            $data['nick'] = trim($inputData['nick']);
-        }
-        if (isset($inputData['avatar'])) {
-            $data['avatar'] = trim($inputData['avatar']);
-        }
-        if (isset($inputData['bg_cover'])) {
-            $data['bg_cover'] = trim($inputData['bg_cover']);
-        }
-        if (isset($inputData['intro'])) {
-            $data['intro'] = rtrim($inputData['intro']);
-        }
-        if (isset($inputData['status'])) {
-            $data['status'] = intval($inputData['status']);
-        }
-        if (isset($inputData['mobile'])) {
-            $data['mobile'] = intval($inputData['mobile']);
-        }
-        $data = action_data($data);
-        if ($data) {
-            $result = Model::query()->where('id', $id)->update($data);
-            if (!$result) {
-                return json_fail('更新失败');
-            }
-        }
-        // 创建管理员日志
-        $oldItem = clone $user_info;
-        $newitem = Model::query()->where('id', $id)->first();
-        $logSubject = '修改一个用户信息,名称:' . $user_info['nick'];
-        $logSvalue = $oldItem->id;
-        $logDbData = ['after_items' => [$newitem->toArray()], 'before_items' => [$oldItem->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        make(UserRepository::class)->delUserCache($user_info['code']);
-        return json_success('', '更新成功');
-    }
-    /**
-     * 发放金币
-     * @param int yes $id 用户ID, 如 14550388
-     * @param int yes $coins 金币数, 如 50 则是加; 如 -100 则是减少
-     * @return mixed
-     * @example param_json_data string: {"handshake":"","data":{"id":14550388,"coins":50}}
-     */
-    public function sendCoins(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|numeric', 'coins' => 'required|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $id = $inputData['id'];
-        $coins = $inputData['coins'];
-        $user_info = Model::query()->where('id', $id)->first();
-        if (!$user_info) {
-            return json_fail('用户不存在');
-        }
-        if ($coins > 0) {
-            $result = Model::query()->where('id', $id)->increment('coins', $coins);
-        } else {
-            $_coins = abs((int) $coins);
-            //取绝对值
-            if ($user_info->coins < $_coins) {
-                return json_fail('用户金币不够,不能扣减');
-            }
-            $result = Model::query()->where('id', $id)->decrement('coins', $_coins);
-        }
-        if (!$result) {
-            return json_fail('处理失败');
-        }
-        make(UserRepository::class)->delUserCache($user_info['code']);
-        //清除用户信息redis缓存
-        if ($coins < 0) {
-            $way = ChangeLogConstant::WAY_2;
-            $type = ChangeLogConstant::TYPE_22;
-        } else {
-            $way = ChangeLogConstant::WAY_1;
-            $type = ChangeLogConstant::TYPE_18;
-        }
-        // 记录帐变使用日志
-        $changeData = ['user_uid' => $user_info['code'], 'currency_type' => ChangeLogConstant::CHANGE_COIN, 'amount' => abs((int) $coins), 'way' => $way, 'type' => $type];
-        // 帐变记录
-        make(QueueService::class)->saveChangeLogJob($changeData);
-        // 创建管理员日志
-        $oldItem = clone $user_info;
-        $newitem = Model::query()->where('id', $id)->first();
-        $logSubject = '对一个用户发放金币,名称:' . $user_info['nick'];
-        $logSvalue = $oldItem->id;
-        $logDbData = ['after_items' => [$newitem->toArray()], 'before_items' => [$oldItem->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success('', '处理成功');
-    }
-    /**
-     * bindPhone 绑定老用户
-     *  业务逻辑:
-     *   1. 后台对指定新用户  输入 老用户对手机号
-     *   2。查询出 老用户对设备号,设备类型
-     *   3。将新/老用户的仅 设备号和设备类型,互换一下。
-     *   4。调接口,退出新老用户(即 缓存中清理下 )
-     * @param int yes $id 新用户的ID,如100
-     * @param int yes $mobile 老用户的手机号
-     * @return mixed
-     * @example param_json_data string:  {"handshake":"","data":{"id":14550389,"mobile":"13873840000"}}
-     */
-    public function bindPhone(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|numeric', 'mobile' => 'required|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $id = $inputData['id'];
-        $mobile = $inputData['mobile'];
-        $user_info_new = Model::query()->where('id', $id)->first();
-        if (!$user_info_new) {
-            return json_fail('新用户不存在');
-        }
-        $user_info_old = Model::query()->where('mobile', $mobile)->first();
-        if (!$user_info_old) {
-            return json_fail('老用户对应的电话号码不存在');
-        }
-        // 交换更新用户设备号,设备类型
-        Db::beginTransaction();
-        try {
-            $data = array('device_no' => $user_info_old['device_no'], 'device_type' => $user_info_old['device_type'], 'finger_hash' => $user_info_old['finger_hash']);
-            $r = Model::query()->where('id', $id)->update($data);
-            if (!$r) {
-                throw new ApiException('更新新用户设备信息失败');
-            }
-            $data = array('device_no' => $user_info_new['device_no'], 'device_type' => $user_info_new['device_type'], 'finger_hash' => $user_info_new['finger_hash']);
-            $r = Model::query()->where('mobile', $mobile)->update($data);
-            if (!$r) {
-                throw new ApiException('更新老用户设备信息失败');
-            }
-            // 清理新/旧用户缓存数据
-            $m = make(UserRepository::class);
-            $m->userLogout($user_info_new['code']);
-            $m->userLogout($user_info_old['code']);
-            Db::commit();
-        } catch (\Exception $e) {
-            Db::rollBack();
-        }
-        // 创建管理员日志
-        $oldItem = clone $user_info_new;
-        $oldItem2 = clone $user_info_old;
-        $newitem = Model::query()->where('id', $id)->first();
-        $newitem2 = Model::query()->where('id', $user_info_old['id'])->first();
-        $logSubject = "绑定老用户,用户id:{$user_info_new['id']}->{$user_info_old['id']}";
-        $logSvalue = $oldItem->id;
-        $logDbData = ['after_items' => [$newitem->toArray(), $newitem2->toArray()], 'before_items' => [$oldItem->toArray(), $oldItem2->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success('', '处理成功');
-    }
-    /**
-     * 对指定用户发放会员卡
-     * @param int yes $id 用户id
-     * @param int yes $card_id 会员卡ID,来源会员卡列表的字段id
-     * @return mixed
-     * @example param_json_data string: {"handshake":"","data":{"id":424432,"card_id":1}}
-     */
-    public function sendCard(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required', 'card_id' => 'required'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $uid = $inputData['id'];
-        $card_id = $inputData['card_id'];
-        $card_info = VipCardModel::query()->where('id', $card_id)->first();
-        if (!$card_info) {
-            return json_fail('会员卡不存在');
-        }
-        if (!$card_info['status']) {
-            return json_fail('会员卡未启动');
-        }
-        $user_info = Model::query()->where('id', $uid)->first();
-        if (!$user_info) {
-            return json_fail('用户不存在');
-        }
-        try {
-            //加会员天数
-            $userInfo = make(UserRepository::class)->getUserInfoFromCache($user_info['code']);
-            if ($userInfo['is_vip'] == 'y') {
-                $vipTime = Carbon::parse($userInfo['vip_expired'])->addDays($card_info['day'])->toDateTimeString();
-            } else {
-                $vipTime = Carbon::now()->addDays($card_info['day'])->toDateTimeString();
-            }
-            $result = Model::query()->where('id', $user_info['id'])->update(['vip_expired' => $vipTime]);
-            if (!$result) {
-                return json_fail('添加用户会员卡时间失败');
-            }
-            make(UserRepository::class)->delUserCache($user_info['code']);
-            //清除用户信息redis缓存
-        } catch (\Exception $e) {
-            return json_fail('处理失败');
-        }
-        //$managerInfo = $authService->getManagerInfo();
-        // $roleId = $managerInfo['role_id'];
-        // $managerId = $managerInfo['manager_id'];
-        $managerInfo = $this->getCurrentManagerInfo();
-        make(SendCardHistoryModel::class)->db()->insertOne(['mid_id' => $managerInfo['manager_id'], 'user_code' => $user_info['code'], 'vip_id' => $card_info['id'], 'vip_days' => $card_info['day']]);
-        // 创建管理员日志
-        $oldItem = clone $user_info;
-        $newitem = Model::query()->where('id', $user_info['id'])->first();
-        $logSubject = "发放{$card_info['day']}天的会员卡,会员卡配置ID:{$card_info['id']},用户id:{$user_info['id']}";
-        $logSvalue = $oldItem->id;
-        $logDbData = ['after_items' => [$newitem->toArray()], 'before_items' => [$oldItem->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success('', '处理成功');
-    }
-    /**
-     * 指定用户的邀请详细
-     * @param yes id int $id 用户ID 如 100
-     * @return mixed
-     * @example param_json_data string: {"handshake":"","page":1,"page_size":5,"data":{"id":30}}
-     */
-    public function inviteDetail(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $page = isset($inputData['page']) ? (int) $inputData['page'] : 1;
-        $page_size = isset($inputData['page_size']) ? (int) $inputData['page_size'] : 20;
-        $rules = ['id' => 'required|numeric'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $order_key = isset($inputData['order']) ? $inputData['order'] : 'id';
-        $order_value = isset($inputData['order_sort']) ? $inputData['order_sort'] : 'desc';
-        if (!$order_key) {
-            $order_key = 'id';
-            //不要信任前端,他可能会传个空字符串过来!
-        }
-        if (!$order_value) {
-            $order_value = 'desc';
-        }
-        $id = $inputData['id'];
-        $select = ['*'];
-        $user_info = Model::query()->select($select)->where('id', $id)->first();
-        if (!$user_info) {
-            return json_fail('用户不存在');
-        }
-        $select = ['nick', 'id', 'mobile', 'created_at'];
-        $invite_list = Model::query()->select($select)->where('parent_uid', $user_info['code'])->orderBy((string) $order_key, (string) $order_value)->paginate($page_size, ['*'], 'page', $page);
-        if (!$invite_list) {
-            $invite_list = array();
-        }
-        $result = array('user_info' => $user_info, 'invite_list' => $invite_list);
-        return json_success($result);
-    }
-    /**
-     * 邀请列表
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example param_json_data string:  {"handshake":"","data":{"page":1,"page_size":5,"search":{"nick":"用户CH3J30","id":"","mobile":"","code":"","stime":"","otime":""},"order":"invite","order_sort":"desc"}}
-     */
-    public function inviteList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $page = isset($inputData['page']) ? (int) $inputData['page'] : 1;
-        $page_size = isset($inputData['page_size']) ? (int) $inputData['page_size'] : 20;
-        $select = ['id', 'nick', 'mobile', 'mobile', 'device_no', 'device_type', 'channel_id', 'code', 'status', 'invite', 'coins', 'ip'];
-        $model = Model::query();
-        $order_key = isset($inputData['order']) ? $inputData['order'] : 'id';
-        $order_value = isset($inputData['order_sort']) ? $inputData['order_sort'] : 'desc';
-        if (!$order_key) {
-            $order_key = 'id';
-            //不要信任前端,他可能会传个空字符串过来!
-        }
-        if (!$order_value) {
-            $order_value = 'desc';
-        }
-        $search = isset($inputData['search']) ? $inputData['search'] : array();
-        if ($search) {
-            foreach ($search as $k => $v) {
-                if (!strlen((string) $v)) {
-                    continue;
-                }
-                switch ($k) {
-                    case "nick":
-                    // 用户名
-                    case "mobile":
-                    // 手机号
-                    case "code":
-                        // 邀请码
-                        $model->where($k, 'like', "{$v}%");
-                        break;
-                    case "stime":
-                        // 自定义-开始日期
-                        $model->where('created_at', '>=', $v);
-                        break;
-                    case "otime":
-                        // 自定义-结束日期
-                        $model->where('created_at', '<=', Carbon::parse($v)->endOfDay()->toDateTimeString());
-                        break;
-                    default:
-                        $model->where($k, $v);
-                }
-            }
-        }
-        $model->where('invite', '>', '0');
-        //仅查询有邀请人数的
-        $invite_all_select = [Db::raw('count(*) as id_all'), Db::raw('sum(invite) as invite_all')];
-        $invite_all = $model->select($invite_all_select)->first();
-        if ($invite_all) {
-            if (!$invite_all['id_all']) {
-                $invite_all['average'] = 0;
-            } else {
-                $invite_all['average'] = round($invite_all['invite_all'] / $invite_all['id_all'], 1);
-            }
-        } else {
-            $invite_all = array("id_all" => 0, "invite_all" => 0, 'average' => 0);
-        }
-        $invite_list = $model->select($select)->orderBy((string) $order_key, (string) $order_value)->paginate($page_size, ['*'], 'page', $page);
-        $result = array('invite_all' => $invite_all, 'invite_list' => $invite_list);
-        return json_success($result);
-    }
-    /**
-     * 发送系统消息给单个用户
-     */
-    public function sendMessageToUser(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['subject' => 'required|string|max:255', 'receive_uid' => 'required|max:32', 'content' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $receiveUid = data_get($inputData, 'receive_uid', '');
-        $content = data_get($inputData, 'content', '');
-        $subject = data_get($inputData, 'subject', '');
-        $msgRepo = make(MessageRepository::class);
-        $msgRepo->sendTextFromSys($receiveUid, $content, $subject);
-        return json_success(['result' => 'success']);
-    }
-}

+ 0 - 158
runtime/container/proxy/Modules_Manage_Controllers_VersionController.proxy.php

@@ -1,158 +0,0 @@
-<?php
-
-/**
- * APP版本升级管理
- * @author xiabian
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Model\VersionModel as Model;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Psr\SimpleCache\CacheInterface;
-class VersionController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 列表
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example param_json_data string:  {"handshake":"","data":{"page":1,"page_size":5,"search":{"title":"","device_type":"I"}}}
-     */
-    public function lists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $page = isset($inputData['page']) ? (int) $inputData['page'] : 1;
-        $page_size = isset($inputData['page_size']) ? (int) $inputData['page_size'] : 20;
-        $select = ['*'];
-        $model = Model::query();
-        $search = isset($inputData['search']) ? $inputData['search'] : array();
-        if ($search) {
-            foreach ($search as $k => $v) {
-                if (!strlen((string) $v)) {
-                    continue;
-                }
-                switch ($k) {
-                    case "title":
-                        // 标题
-                        break;
-                    default:
-                        $model->where($k, $v);
-                }
-            }
-        }
-        $result = $model->select($select)->orderBy('id', 'desc')->paginate($page_size, ['*'], 'page', $page);
-        return json_success($result);
-    }
-    /**
-     * 新增
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string:
-     *  {"handshake":"","data":{"title":"测试","remark":"","device_type":"A","force":0,"version_code":"1.0.2","version_type":"free","package_path":"http://www.baidu.com","status":0}}
-     */
-    public function add(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['title' => 'required|string', 'remark' => 'nullable|string', 'device_type' => 'required|in:I,A', 'force' => 'required|in:0,1', 'version_code' => 'required|string', 'version_type' => 'required', 'package_path' => 'required|string', 'zip_url' => 'nullable|string', 'status' => 'required|in:0,1'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $data = ['title' => $inputData['title'], 'remark' => $inputData['remark'] ?? "", 'device_type' => $inputData['device_type'], 'force' => $inputData['force'], 'version_code' => $inputData['version_code'], 'version_type' => $inputData['version_type'], 'package_path' => $inputData['package_path'], 'zip_url' => $inputData['zip_url'], 'status' => $inputData['status']];
-        $result = Model::query()->create($data);
-        $this->clearCache($inputData['version_code']);
-        // 创建管理员日志
-        $newitem = clone $result;
-        $logSubject = "新增App版本";
-        $logSvalue = $newitem->id;
-        $logDbData = ['after_items' => [$newitem->toArray()], 'before_items' => []];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result);
-    }
-    /**
-     * 编辑
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string:    {"handshake":"","data":{"id":7,"title":"测试编辑","remark":"","device_type":"","force":0,"version_code":"","version_type":"","package_path":"","status":0}}
-     */
-    public function update(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|int', 'title' => 'nullable|string', 'remark' => 'nullable|string', 'device_type' => 'nullable|in:I,A', 'force' => 'nullable|in:0,1', 'version_code' => 'nullable|string', 'version_type' => 'nullable', 'package_path' => 'nullable|string', 'zip_url' => 'nullable|string', 'status' => 'nullable|in:0,1'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $info = Model::query()->where('id', $inputData['id'])->first();
-        if (!$info) {
-            return json_fail('APP版本信息不存在');
-        }
-        $versionCode = $inputData['version_code'] ?? "";
-        $data = ['title' => $inputData['title'] ?? "", 'remark' => $inputData['remark'] ?? "", 'device_type' => $inputData['device_type'] ?? "", 'force' => $inputData['force'] ?? "", 'version_code' => $versionCode, 'version_type' => $inputData['version_type'] ?? "", 'package_path' => $inputData['package_path'] ?? "", 'zip_url' => $inputData['zip_url'] ?? "", 'status' => $inputData['status'] ?? ""];
-        $data = action_data($data);
-        $result = Model::query()->where('id', $inputData['id'])->update($data);
-        $this->clearCache($versionCode);
-        // 创建管理员日志
-        $olditem = clone $info;
-        $newitem = Model::query()->where('id', $inputData['id'])->first();
-        $logSubject = "修改APP版本信息";
-        $logSvalue = $olditem->id;
-        $logDbData = ['after_items' => [$newitem->toArray()], 'before_items' => [$olditem->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result);
-    }
-    /**
-     * 删除 (真实删除数据)
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string:    {"handshake":"","data":{"id":7}}
-     */
-    public function delete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $info = Model::query()->where('id', $inputData['id'])->first();
-        if (!$info) {
-            return json_fail('APP版本信息不存在');
-        }
-        $result = Model::query()->where('id', $inputData['id'])->delete();
-        if (!$result) {
-            return json_fail('删除失败');
-        }
-        $this->clearCache($info->version_code);
-        // 创建管理员日志
-        $olditem = clone $info;
-        $logSubject = "删除APP版本信息";
-        $logSvalue = $olditem->id;
-        $logDbData = ['after_items' => [], 'before_items' => [$olditem->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result);
-    }
-    public function clearCache($versionCode = '')
-    {
-        $arrKeys = ['version:I', 'version:A', 'version:H', 'force_version:I', 'force_version:A', 'force_version:H'];
-        if (!empty($versionCode)) {
-            $key1 = 'version:I:v' . $versionCode;
-            $key2 = 'version:A:v' . $versionCode;
-            $key3 = 'version:H:v' . $versionCode;
-            $arrKeys = array_merge($arrKeys, [$key1, $key2, $key3]);
-        }
-        $r = make(CacheInterface::class)->deleteMultiple($arrKeys);
-        return $r;
-    }
-}

+ 0 - 1059
runtime/container/proxy/Modules_Manage_Controllers_VideoController.proxy.php

@@ -1,1059 +0,0 @@
-<?php
-
-/**
- * 视频相关
- * @author x.b
- *
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Jobs\ClearAllLastestPagesCacheJob;
-use App\Jobs\HomeVideoInitJob;
-use App\Jobs\SendMessageToUserJob;
-use App\Jobs\VideoAutoCommentJob;
-use App\Model\TypeVideoModel;
-use App\Model\UserBuyVideoModel;
-use App\Model\UserModel;
-use App\Model\VideoModel as Model;
-use App\Model\VideoModel;
-use App\Model\VideoPerfectModel;
-use App\Repositories\CreatorRepository;
-use App\Repositories\Service\CommonService;
-use App\Repositories\Service\QueueService;
-use App\Repositories\VideoRepository;
-use Carbon\Carbon;
-use Hyperf\DbConnection\Db;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Api\Services\VideoService;
-use App\Model\TypeModel;
-use App\Constants\CommonConstant;
-class VideoController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 视频列表
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example param_json_data string:
-     *     {"handshake":"","data":{"page":1,"page_size":5,"order":"id","order_sort":"desc","search":{"is_home":"","type_id":"53","title":"","video_id":"","user_id":"","status":"","check":"","stime":"","otime":""}}}
-     */
-    public function list(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'];
-        $page_size = intval($inputData['page_size']);
-        if ($page_size <= 0) {
-            $page_size = 12;
-        }
-        if ($page_size > 100) {
-            $page_size = CommonConstant::PAGE_SIZE;
-        }
-        $select = ['video.*', Db::raw("(select user.nick from user where user.code=video.uid) AS user_nick")];
-        $model = Model::query();
-        $order_key = isset($inputData['order']) ? $inputData['order'] : 'id';
-        $order_value = isset($inputData['order_sort']) ? $inputData['order_sort'] : 'desc';
-        if (!$order_key) {
-            $order_key = 'id';
-            //不要信任前端,他可能会传个空字符串过来!
-        }
-        if (!$order_value) {
-            $order_value = 'desc';
-        }
-        // "type_id":"视频分类ID", "title":"视频名字", "video_id":"视频ID", "user_id":"用户ID", "status":"上架状态", "check":"审核状态","stime":"视频的上传开始时间", "otime":"视频的上传结束时间", "is_home":"是否为首页视频( 0-不是 1-是 ''-不过滤)"
-        // 备注:  mu字段没包含.m3u8就是没转码
-        $search = isset($inputData['search']) ? $inputData['search'] : array();
-        if ($search) {
-            foreach ($search as $k => $v) {
-                if (!strlen((string) $v)) {
-                    continue;
-                }
-                switch ($k) {
-                    case "is_home":
-                        $is_home_ids = VideoPerfectModel::query()->pluck('video_id');
-                        if ($v == '1') {
-                            $model->whereIn('id', $is_home_ids);
-                        } else {
-                            $model->whereNotIn('id', $is_home_ids);
-                        }
-                        break;
-                    case "type_id":
-                        $model->where('tv.' . $k, $v);
-                        $model->leftJoin('type_video as tv', 'video.id', '=', 'tv.video_id');
-                        break;
-                    case "category_alias_name":
-                        $model->whereHas('perfect', function ($q1) use($v) {
-                            $q1->where('category_alias_name', $v);
-                        });
-                        break;
-                    case "title":
-                        $model->where('video.' . $k, 'like', '%' . $v . '%');
-                        break;
-                    case "user_id":
-                        $model->where('video.uid', $v);
-                        break;
-                    case "video_id":
-                        $model->where('video.id', $v);
-                        break;
-                    case "stime":
-                        $model->where('video.created_at', '>=', Carbon::parse($v)->startOfDay()->toDateTimeString());
-                        break;
-                    case "otime":
-                        $model->where('video.created_at', '<=', Carbon::parse($v)->endOfDay()->toDateTimeString());
-                        break;
-                    case "online_otime":
-                        $model->where('video.online_at', '>=', Carbon::parse($v)->startOfDay()->toDateTimeString());
-                        break;
-                    case "online_stime":
-                        $model->where('video.online_at', '<=', Carbon::parse($v)->endOfDay()->toDateTimeString());
-                        break;
-                    case "player_type":
-                        $model->where('video.player_type', $v);
-                        break;
-                    default:
-                        $model->where('video.' . $k, $v);
-                }
-            }
-        }
-        $creatorRepo = make(CreatorRepository::class);
-        $result = $model->select($select)->with(['category:type.id as type_id,type.title', 'perfect:id,video_id,category_alias_name'])->orderBy((string) $order_key, (string) $order_value)->paginate($page_size, ['*'], 'page', $page);
-        $result = $result->toArray();
-        if (!empty($result['data'])) {
-            foreach ($result['data'] as &$v) {
-                if ($v['pay_type'] == 2) {
-                    // 金币视频, 才走sql
-                    $v['buy_video_count'] = $creatorRepo->countVideoBuyer($v['id']);
-                } else {
-                    $v['buy_video_count'] = 0;
-                }
-            }
-        }
-        //处理图片/视频路径
-        //        foreach ($result as $v) {
-        //            if (!$v->from) {
-        //                $v->cover = make(CommonService::class)->getImageUrl((string)$v->cover, true);
-        //                $v->smu   = make(VideoService::class)->getPlayUrl((string)$v->from, (string)$v->smu);
-        //                $v->mu    = make(VideoService::class)->getPlayUrl((string)$v->from, (string)$v->mu);
-        //            }
-        //        }
-        return json_success($result);
-    }
-    /**
-     * 删除 (假删)
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string:    {"handshake":"","data":{"id":8}}
-     */
-    public function delete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $info = Model::query()->where('id', $inputData['id'])->first();
-        if (!$info) {
-            return json_fail('视频信息不存在');
-        }
-        $result = Model::query()->where('id', $inputData['id'])->delete();
-        if (!$result) {
-            return json_fail('删除失败');
-        }
-        // 清理最新视频分页缓存.
-        dispatch_job(new ClearAllLastestPagesCacheJob());
-        // 创建管理员日志
-        $olditem = clone $info;
-        $logSubject = "删除视频";
-        $logSvalue = $olditem->id;
-        $logDbData = ['after_items' => [], 'before_items' => [$olditem->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result);
-    }
-    /**
-     * 删除-批量 (假删)
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string:    {"handshake":"","data":{"ids":"1,2,4"}}
-     */
-    public function deleteList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['ids' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $ids = $inputData['ids'];
-        $_ids = explode(',', $ids);
-        $ids_list = [];
-        foreach ($_ids as $kk => $vv) {
-            if (!$vv) {
-                continue;
-            }
-            $ids_list[] = $vv;
-        }
-        if (!$ids_list) {
-            return json_fail("操作失败,没有满足的视频ID");
-        }
-        $result = Model::query()->whereIn('id', $ids_list)->delete();
-        if (!$result) {
-            return json_fail('删除失败');
-        }
-        // 清理最新视频分页缓存.
-        dispatch_job(new ClearAllLastestPagesCacheJob());
-        // 创建管理员日志
-        $logSubject = "批量删除视频,ids为:{$ids}";
-        $logSvalue = '';
-        $logDbData = ['after_items' => [], 'before_items' => [$ids_list]];
-        return json_success($result);
-    }
-    /**
-     * 回收站-列表 (强制过滤删除的视频)
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example param_json_data string:
-     *     {"handshake":"","data":{"page":1,"page_size":5,"order":"id","order_sort":"desc","search":{"type_id":"","title":"","video_id":"","user_id":"","status":"","check":"","stime":"","otime":""}}}
-     */
-    public function deleteHistoryList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'];
-        $page_size = $inputData['page_size'];
-        $select = ['video.*', Db::raw("(select user.nick from user where user.code=video.uid) AS user_nick")];
-        //$model = Model::query();   //这样写法,是查询出deleted_at无值的数据
-        $model = Model::query()->onlyTrashed();
-        //注意:这样写,因需要查询出deleted_at有值的数据,
-        $order_key = isset($inputData['order']) ? $inputData['order'] : 'id';
-        $order_value = isset($inputData['order_sort']) ? $inputData['order_sort'] : 'desc';
-        if (!$order_key) {
-            $order_key = 'id';
-            //不要信任前端,他可能会传个空字符串过来!
-        }
-        if (!$order_value) {
-            $order_value = 'desc';
-        }
-        // "type_id":"视频分类ID", "title":"视频名字", "video_id":"视频ID", "user_id":"用户ID", "status":"上架状态", "check":"审核状态","stime":"视频的上传开始时间", "otime":"视频的上传结束时间"
-        // 备注:  mu字段没包含.m3u8就是没转码
-        $search = isset($inputData['search']) ? $inputData['search'] : array();
-        if ($search) {
-            foreach ($search as $k => $v) {
-                if (!strlen((string) $v)) {
-                    continue;
-                }
-                switch ($k) {
-                    case "type_id":
-                        $model->where('tv.' . $k, $v);
-                        $model->leftJoin('type_video as tv', 'video.id', '=', 'tv.video_id');
-                        break;
-                    case "title":
-                        $model->where('video.' . $k, 'like', $v . '%');
-                        break;
-                    case "user_id":
-                        $model->where('video.uid', $v);
-                        break;
-                    case "video_id":
-                        $model->where('video.id', $v);
-                        break;
-                    case "stime":
-                        $model->where('video.created_at', '>=', $v);
-                        break;
-                    case "otime":
-                        $model->where('video.created_at', '<=', Carbon::parse($v)->endOfDay()->toDateTimeString());
-                        break;
-                    default:
-                        $model->where('video.' . $k, $v);
-                }
-            }
-        }
-        $result = $model->select($select)->with(['category:type.id as type_id,type.title'])->orderBy((string) $order_key, (string) $order_value)->paginate($page_size, ['*'], 'page', $page);
-        //处理图片/视频路径
-        //        foreach ($result as $v) {
-        //            if (!$v->from) {
-        //                $v->cover = make(CommonService::class)->getImageUrl((string)$v->cover, true);
-        //                $v->smu   = make(VideoService::class)->getPlayUrl((string)$v->from, (string)$v->smu);
-        //                $v->mu    = make(VideoService::class)->getPlayUrl((string)$v->from, (string)$v->mu);
-        //            }
-        //        }
-        return json_success($result);
-    }
-    /**
-     * 回收站-恢复(即取消删除)
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string:   {"handshake":"","data":{"id":2}}
-     */
-    public function reset(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $info = Db::table('video')->where('id', $inputData['id'])->first();
-        if (!$info) {
-            return json_fail('视频信息不存在');
-        }
-        $data = ['deleted_at' => null];
-        $result = Db::table('video')->where('id', $inputData['id'])->update($data);
-        /*
-        $result = Model::query()
-            ->where('id', $inputData['id'])
-            ->restore();  // 这个写法可以设置为null, 框架提供的方法
-        */
-        if (!$result) {
-            return json_fail('恢复失败');
-        }
-        // 创建管理员日志
-        $olditem = clone $info;
-        $olditem = json_decode(json_encode($olditem), true);
-        $newitem = Model::query()->where('id', $inputData['id'])->first();
-        $logSubject = "恢复视频,将已删除的视频ID:{$inputData['id']},进行恢复状态";
-        $logSvalue = $inputData['id'];
-        $logDbData = ['after_items' => [$newitem->toArray()], 'before_items' => [
-            //$olditem->toArray(),
-            $olditem,
-        ]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        // 清理最新视频分页缓存.
-        dispatch_job(new ClearAllLastestPagesCacheJob());
-        return json_success($result);
-    }
-    /**
-     * 首页视频管理-列表
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example param_json_data string:
-     *      {"handshake":"","data":{"page":1,"page_size":5,"order":"id","order_sort":"desc","search":{"title":"","video_id":"","user_id":"","stime":"","otime":""}}}
-     */
-    public function indexList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $page = $inputData['page'];
-        $page_size = $inputData['page_size'];
-        $order_key = $inputData['order'] ?? "";
-        $order_value = $inputData['order_sort'] ?? 'desc';
-        switch ($order_key) {
-            case "like":
-                $order_key = 'video.like';
-                //点赞量
-                break;
-            default:
-                $order_key = 'video_perfect.id';
-        }
-        switch ($order_value) {
-            case "asc":
-                $order_value = 'asc';
-                break;
-            default:
-                $order_value = 'desc';
-        }
-        $model = VideoPerfectModel::query();
-        // "title":"视频名字", "video_id":"视频ID", "user_id":"用户ID", "stime":"首页视频添加-开始时间", "otime":"首页视频添加-结束时间"
-        $search = isset($inputData['search']) ? $inputData['search'] : array();
-        if ($search) {
-            foreach ($search as $k => $v) {
-                if (!strlen((string) $v)) {
-                    continue;
-                }
-                switch ($k) {
-                    case "title":
-                        $model->where('video.' . $k, 'like', "{$v}%");
-                        break;
-                    case "video_id":
-                        $model->where('video_perfect.' . $k, $v);
-                        break;
-                    case "user_id":
-                        $model->where('video.uid', $v);
-                        break;
-                    case "stime":
-                        $model->where('video_perfect.created_at', '>=', $v);
-                        break;
-                    case "otime":
-                        $model->where('video_perfect.created_at', '<=', Carbon::parse($v)->endOfDay()->toDateTimeString());
-                        break;
-                    default:
-                }
-            }
-        }
-        $select = ['video_perfect.id as video_perfect_id', 'video_perfect.created_at as video_perfect_created_at', 'video_perfect.video_id', 'video.*', Db::raw("(select user.nick from user where user.code=video.uid) AS user_nick")];
-        $result = $model->select($select)->join('video', 'video.id', '=', 'video_perfect.video_id')->with(['category:type.id as type_id,type.title'])->orderBy((string) $order_key, (string) $order_value)->paginate($page_size, ['*'], 'page', $page);
-        //处理图片/视频路径
-        //        foreach ($result as $v) {
-        //            if (!$v->from) {
-        //                $v->cover = make(CommonService::class)->getImageUrl((string)$v->cover, true);
-        //                $v->smu   = make(VideoService::class)->getPlayUrl((string)$v->from, (string)$v->smu);
-        //                $v->mu    = make(VideoService::class)->getPlayUrl((string)$v->from, (string)$v->mu);
-        //            }
-        //        }
-        return json_success($result);
-    }
-    /**
-     * 首页视频管理-删除[真删]
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string:   {"handshake":"","data":{"video_id":"11"}}
-     */
-    public function indexDelete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['video_id' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $video_id = $inputData['video_id'];
-        $info = VideoPerfectModel::query()->where('video_id', $video_id)->first();
-        if (!$info) {
-            return json_fail("此视频已从首页视频中删除,请勿重复操作");
-        }
-        $result = VideoPerfectModel::query()->where('video_id', $video_id)->delete();
-        if (!$result) {
-            return json_fail("操作失败");
-        }
-        // 创建管理员日志
-        $old_items = clone $info;
-        $logSubject = "删除首页视频,id为:{$video_id}";
-        $logSvalue = $video_id;
-        $logDbData = ['after_items' => [], 'before_items' => [$old_items->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        // 清理最新视频分页缓存.
-        dispatch_job(new ClearAllLastestPagesCacheJob());
-        return json_success('', '操作成功');
-    }
-    /**
-     * 首页视频管理-批量删除[真删]
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string:   {"handshake":"","data":{"ids":"1,3,4"}}
-     */
-    public function indexDeleteMore(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['ids' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $ids = $inputData['ids'];
-        $_ids = explode(',', $ids);
-        $ids_list = [];
-        foreach ($_ids as $kk => $vv) {
-            if (!$vv) {
-                continue;
-            }
-            $ids_list[] = $vv;
-        }
-        if (!$ids_list) {
-            return json_fail("操作失败,没有满足的视频ID");
-        }
-        $result = VideoPerfectModel::query()->whereIn('video_id', $ids_list)->delete();
-        if (!$result) {
-            return json_fail("操作失败");
-        }
-        // 创建管理员日志
-        $logSubject = "批量删除首页视频,ids为:{$ids}";
-        $logSvalue = '';
-        $logDbData = ['after_items' => [], 'before_items' => [$ids_list]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        // 清理最新视频分页缓存.
-        dispatch_job(new ClearAllLastestPagesCacheJob());
-        return json_success('', '操作成功');
-    }
-    /**
-     * 首页视频管理-批量添加
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string:   {"handshake":"","data":{"ids":"1,2,3,4"}}
-     */
-    public function indexAdds(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['ids' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            return json_fail($validator->errors()->first());
-        }
-        $ids = $inputData['ids'];
-        $_ids = explode(',', $ids);
-        $check = VideoPerfectModel::query()->whereIn('video_id', $_ids)->get();
-        $_ids_db = [];
-        if ($check) {
-            //过滤已添加的视频id
-            foreach ($check as $k) {
-                $_ids_db[] = $k->video_id;
-            }
-        }
-        $data = [];
-        foreach ($_ids as $kk => $vv) {
-            if (!$vv) {
-                continue;
-            }
-            if (in_array($vv, $_ids_db)) {
-                continue;
-            }
-            $data[] = array('video_id' => $vv, 'created_at' => Carbon::now()->toDateTimeString(), 'updated_at' => Carbon::now()->toDateTimeString());
-        }
-        if (!$data) {
-            return json_fail("这些视频已处理,请勿重复操作");
-        }
-        $result = VideoPerfectModel::query()->insert($data);
-        if (!$result) {
-            return json_fail("操作失败");
-        }
-        // 创建管理员日志
-        $logSubject = "批量追加首页视频";
-        $logSvalue = '';
-        $logDbData = ['after_items' => [$data], 'before_items' => []];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        // 清理最新视频分页缓存.
-        dispatch_job(new ClearAllLastestPagesCacheJob());
-        return json_success('', '操作成功');
-    }
-    /**
-     * 审核
-     * @author x.b
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string: {"handshake":"","data":{"video_id":7,"check":1}}
-     */
-    public function check(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['video_id' => 'required|int', 'check' => 'required|in:1,2'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $data = ['id' => $inputData['video_id'], 'check' => $inputData['check']];
-        $data = action_data($data);
-        $oldItem = VideoModel::query()->where('id', $inputData['video_id'])->first();
-        if (!$oldItem) {
-            return json_fail('视频不存在');
-        }
-        if ($inputData['check'] == 1 && strpos($oldItem->mu, '.mp4')) {
-            //状态改为转码中
-            $data['status'] = 2;
-            //转码
-            make(QueueService::class)->addShiftVideoJob(['path' => $oldItem->mu, 'table' => 'video', 'id' => $oldItem->id, 'update' => 'mu']);
-        }
-        $result = VideoModel::query()->where('id', $inputData['video_id'])->update($data);
-        $newitem = VideoModel::query()->where('id', $inputData['video_id'])->first();
-        // 创建管理员日志
-        $logSubject = "审核视频";
-        $logSvalue = $inputData['video_id'];
-        $logDbData = ['after_items' => [$newitem->toArray()], 'before_items' => [$oldItem->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result);
-    }
-    /**
-     * 编辑(标示上架/下架)
-     * @author x.b
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @param string no $video_id  视频ID(内调此接口使用) - 非必传
-     * @param string no $status   状态0-下架 1-上架(内调此接口使用)- 非必传
-     * @return mixed   若是 内调时,返回bool
-     * @example  param_json_data string: {"handshake":"","data":{"video_id":7,"status":1}}
-     */
-    public function update(ValidatorFactoryInterface $validatorFactory, $video_id = '', $status = '')
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['video_id' => 'required|int', 'status' => 'required|in:1,2'];
-        if (!$video_id) {
-            $validator = $validatorFactory->make($inputData, $rules);
-            if ($validator->fails()) {
-                // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-                return json_fail($validator->errors()->first());
-            }
-            $is_self = 0;
-            //是否为内调 0-不是 1-是
-        } else {
-            $inputData['video_id'] = $video_id;
-            $inputData['status'] = $status;
-            $is_self = 1;
-        }
-        $oldItem = VideoModel::query()->where('id', $inputData['video_id'])->first();
-        if (!$oldItem) {
-            return $is_self ? false : json_fail('视频不存在');
-        }
-        //        if ($inputData['status'] == 1
-        //            &&
-        //            (
-        //                !strpos($oldItem->mu, '.m3u8')
-        //                ||
-        //                !strpos($oldItem->smu, '.m3u8')
-        //            )
-        //        ) {
-        //            return $is_self ? false : json_fail('视频还未转码');
-        //        }
-        $data = ['status' => $inputData['status'], 'online_at' => date('Y-m-d H:i:s')];
-        $result = VideoModel::query()->where('id', $inputData['video_id'])->update($data);
-        // 同步沉余更新视频分类数据表
-        $data2 = ['status' => $inputData['status']];
-        $result = TypeVideoModel::query()->where('video_id', $inputData['video_id'])->update($data2);
-        $newitem = VideoModel::query()->where('id', $inputData['video_id'])->first();
-        // 创建管理员日志
-        $logSubject = "上下架视频";
-        $logSvalue = $inputData['video_id'];
-        $logDbData = ['after_items' => [$newitem->toArray()], 'before_items' => [$oldItem->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        if ($oldItem->status != $newitem->status) {
-            // 清理最新视频分页缓存.
-            dispatch_job(new ClearAllLastestPagesCacheJob());
-        }
-        return $is_self ? true : json_success($result);
-    }
-    /**
-     * 批量上架  ( 特殊处理: 内调 依次 上架 接口)
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string:    {"handshake":"","data":{"ids":"8,9,10"}}
-     */
-    public function setStatusUp(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['ids' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $ids = $inputData['ids'];
-        $_ids = explode(',', $ids);
-        $ids_list = [];
-        foreach ($_ids as $kk => $vv) {
-            if (!$vv) {
-                continue;
-            }
-            $ids_list[] = $vv;
-        }
-        if (!$ids_list) {
-            return json_fail("操作失败,没有满足的视频ID");
-        }
-        $error_msg = "";
-        foreach ($ids_list as $v) {
-            $r = self::update($validatorFactory, $v, 1);
-            if ($r === false) {
-                $error_msg .= ' ' . $v;
-            }
-        }
-        if ($error_msg) {
-            return json_fail('', '操作失败,以下视频ID处理失败:' . $error_msg);
-        } else {
-            // 清理最新视频分页缓存.
-            dispatch_job(new ClearAllLastestPagesCacheJob());
-            return json_success('', '全部处理成功');
-        }
-    }
-    /**
-     * 批量下架
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string:    {"handshake":"","data":{"ids":"8,9,10"}}
-     */
-    public function setStatusDown(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['ids' => 'required|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $ids = $inputData['ids'];
-        $_ids = explode(',', $ids);
-        $ids_list = [];
-        foreach ($_ids as $kk => $vv) {
-            if (!$vv) {
-                continue;
-            }
-            $ids_list[] = $vv;
-        }
-        if (!$ids_list) {
-            return json_fail("操作失败,没有满足的视频ID");
-        }
-        $data = [
-            'status' => 2,
-            //2-下架 1-上架
-            'online_at' => Carbon::now()->toDateTimeString(),
-        ];
-        $result = VideoModel::query()->whereIn('id', $ids_list)->update($data);
-        // 同步沉余更新视频分类数据表
-        $data2 = ['status' => 0];
-        $result = TypeVideoModel::query()->whereIn('video_id', $ids_list)->update($data2);
-        // 创建管理员日志
-        $logSubject = "批量下架视频,ids为:{$ids}";
-        $logSvalue = '';
-        $logDbData = ['after_items' => [], 'before_items' => [$ids_list]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        // 清理最新视频分页缓存.
-        dispatch_job(new ClearAllLastestPagesCacheJob());
-        return json_success($result);
-    }
-    /**
-     * 添加/修改视频
-     * @author x.b
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string: {"handshake":"","data":{"video_id":7,"title":1,"cover":'',"mu":'','like':1,"type_ids":'1,3,4',"coins":"10"}}
-     */
-    public function save(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        if (isset($inputData['video_id'])) {
-            $rules = [
-                'video_id' => 'int',
-                'title' => 'string',
-                'cover' => 'string',
-                'mu' => 'string',
-                //                'like'      => 'int',
-                'type_ids' => 'string',
-                'recommend_level' => 'int',
-                'pay_type' => 'required|int',
-            ];
-        } else {
-            $rules = [
-                'video_id' => 'int',
-                'title' => 'required|string',
-                'cover' => 'required|string',
-                'mu' => 'required|string',
-                //                'like'      => 'int',
-                'type_ids' => 'string',
-                'recommend_level' => 'int',
-                'pay_type' => 'required|int',
-            ];
-        }
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        if (!$inputData['video_id']) {
-            if (!$inputData['mu']) {
-                return json_fail('请上传视频');
-            }
-        }
-        $coins = intval(data_get($inputData, 'coins', 0));
-        $payType = intval(data_get($inputData, 'pay_type', 1));
-        if ($coins < 0) {
-            return json_fail('请填写金币');
-        }
-        $data = [
-            'title' => $inputData['title'] ?? '',
-            'cover' => $inputData['cover'] ?? '',
-            'mu' => $inputData['mu'] ?? '',
-            //            'like'     => $inputData['like'],
-            'pay_type' => $payType,
-            'coins' => $coins,
-            //金币
-            'uid' => $inputData['uid'] ?? '',
-            //视频表uid 即用户邀请码 (微啪-非必传,官方视频绑定为 DFZUAR ),抖音-约会版 必传字段
-            'recommend_level' => isset($inputData['recommend_level']) ? intval($inputData['recommend_level']) : 0,
-        ];
-        /*if ($data['uid']) {
-              $check = UserModel::query()
-                  ->select(['id'])
-                  ->where('code', $data['uid'])
-                  ->first();
-              if (!$check) {
-                  return json_fail('请填写正确的用户邀请码');
-              }
-          }*/
-        $newStrTags = '';
-        $newArrTags = [];
-        $create = action_data($data);
-        if ($inputData['video_id']) {
-            $oldItem = Model::query()->where('id', $inputData['video_id'])->first();
-            if (!$oldItem) {
-                return json_fail('视频不存在');
-            }
-            //判断分类
-            if ($inputData['type_ids']) {
-                $ids = explode(',', $inputData['type_ids']);
-                foreach ($ids as $k => $id) {
-                    $typeObj = TypeModel::query()->where(['id' => $id])->first();
-                    if (!empty($typeObj)) {
-                        $newArrTags[] = $typeObj->title;
-                    }
-                    $type[$k] = ['type_id' => $id, 'video_id' => $inputData['video_id']];
-                }
-            }
-            if (isset($type)) {
-                TypeVideoModel::query()->where('video_id', $inputData['video_id'])->delete();
-                TypeVideoModel::query()->insert($type);
-            }
-            if (!empty($newArrTags)) {
-                $newStrTags = implode(',', $newArrTags);
-                $create['tags'] = $newStrTags;
-            } else {
-                $create['tags'] = '';
-            }
-            $result = Model::query()->where('id', $inputData['video_id'])->update($create);
-            $newitem = Model::query()->where('id', $inputData['video_id'])->first();
-            // 创建管理员日志
-            $logSubject = "修改视频";
-            $logSvalue = $inputData['video_id'];
-            $logDbData = ['after_items' => [$newitem->toArray()], 'before_items' => [$oldItem->toArray()]];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            if ($oldItem->status != $newitem->status) {
-                // 清理最新视频分页缓存.
-                dispatch_job(new ClearAllLastestPagesCacheJob());
-            }
-        } else {
-            if ($inputData['type_ids']) {
-                $ids = explode(',', $inputData['type_ids']);
-                foreach ($ids as $k => $id) {
-                    $typeObj = TypeModel::query()->where(['id' => $id])->first();
-                    if (!empty($typeObj)) {
-                        $newArrTags[] = $typeObj->title;
-                    }
-                    $type[$k] = ['type_id' => $id, 'video_id' => $inputData['video_id']];
-                }
-            }
-            if (!empty($newArrTags)) {
-                $newStrTags = implode(',', $newArrTags);
-                $create['tags'] = $newStrTags;
-            } else {
-                $create['tags'] = '';
-            }
-            $result = Model::query()->create($create);
-            if (!$result) {
-                return json_fail('创建失败');
-            }
-            if (isset($type)) {
-                TypeVideoModel::query()->insert($type);
-            }
-            // 创建管理员日志
-            $logSubject = "添加视频";
-            $logSvalue = $result->id;
-            $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
-            $this->log($logSubject, $logSvalue, $logDbData);
-            // 清理最新视频分页缓存.
-            dispatch_job(new ClearAllLastestPagesCacheJob());
-        }
-        return json_success($result);
-    }
-    /**
-     * 首页视频发布
-     * @author x.b
-     * @return mixed
-     */
-    public function home()
-    {
-        $video_ids = VideoPerfectModel::query()->pluck('video_id')->all();
-        $count = count($video_ids) / 5;
-        //总条数
-        if ($count < 20) {
-            return json_fail('视频至少添加100个,当前' . count($video_ids) . '个');
-        }
-        $result = make(QueueService::class)->addHomeVideoJob(['video_ids' => $video_ids]);
-        // 创建管理员日志
-        $logSubject = "发布首页视频";
-        $logSvalue = 0;
-        $logDbData = ['after_items' => [[]], 'before_items' => [$video_ids]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result);
-    }
-    /**
-     * 首页视频桶缓存初始化.
-     * @return mixed
-     */
-    public function homeInit()
-    {
-        dispatch_job(new HomeVideoInitJob());
-        $logSubject = "首页视频桶缓存初始化";
-        $logSvalue = 0;
-        $logDbData = ['after_items' => [[]], 'before_items' => []];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success(['result' => 'success']);
-    }
-    /**
-     * 硬删除,用于回收站内.
-     * @return mixed
-     */
-    public function hardDelete()
-    {
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $inputData = $this->getJsonData();
-        $rules = ['ids' => 'required|array'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $ids = data_get($inputData, 'ids', []);
-        $ids = array_filter($ids);
-        $ids = array_unique($ids);
-        if (empty($ids)) {
-            return json_fail('请选择视频');
-        }
-        $newIds = [];
-        $items = VideoModel::query()->withTrashed()->whereIn('id', $ids)->get(['id', 'deleted_at']);
-        if ($items->isNotEmpty()) {
-            foreach ($items as $v) {
-                if (is_null($v->deleted_at)) {
-                    return json_fail($v->id . ', 非回收站视频,不能完整执行硬删除操作');
-                    break;
-                } else {
-                    $newIds[] = $v->id;
-                }
-            }
-        }
-        if (!empty($newIds)) {
-            $videoRepo = make(VideoRepository::class);
-            $videoRepo->hardDelete($newIds);
-        } else {
-            return json_fail('视频选择有误');
-        }
-        return json_success(['result' => 'success']);
-    }
-    /**
-     * 审核
-     * @return mixed
-     */
-    public function changeCheck()
-    {
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|int', 'target_check' => 'required|int', 'reject_reason' => 'nullable'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $videoRepo = make(VideoRepository::class);
-        $targetCheck = intval(data_get($inputData, 'target_check', 0));
-        $obj = $videoRepo->find($inputData['id'], ['id', 'title', 'status', 'type', 'check', 'reject_reason', 'updated_at', 'created_at', 'uid', 'online_at']);
-        if (empty($obj)) {
-            return json_fail('对象不存在');
-        }
-        $rejectReason = data_get($inputData, 'reject_reason', '');
-        if ($obj->check == $targetCheck) {
-            return json_fail('前后状态无变化');
-        }
-        $creatorRepo = make(CreatorRepository::class);
-        $creatorObj = $creatorRepo->detail($obj->uid);
-        $videoTitle = mb_substr($obj->title, 0, 30);
-        $msgSubjct = '恭喜您,视频【' . $videoTitle . '】审核通过.';
-        $msgContent = '您可以分享本APP给微信、qq群里的朋友,收益越大.';
-        $obj->reject_reason = '';
-        if ($targetCheck == 2) {
-            $obj->reject_reason = $rejectReason;
-            $obj->status = 2;
-            $msgSubjct = '视频【' . $videoTitle . '】未通过审核';
-            $msgContent = '拒绝原因:' . $rejectReason . ', 若有异议,请联系客服!';
-        } elseif ($targetCheck == 1) {
-            $obj->status = 1;
-            //审核通过就直接上架.
-            $obj->online_at = Carbon::now()->toDateTimeString();
-            // 上架时间
-            $jobParams = ['video_id' => $obj->id, 'type' => $obj->type, 'status' => 1, 'check' => $targetCheck];
-            // 异步自动增加评论和点赞
-            dispatch_job(new VideoAutoCommentJob($jobParams));
-        }
-        $obj->check = $targetCheck;
-        $saveStatus = $obj->save();
-        if ($saveStatus && !empty($creatorObj)) {
-            $jobParams = ['from_type' => 'sys', 'receive_uid' => $obj->uid, 'subject' => $msgSubjct, 'content' => $msgContent];
-            // 异步发送通知站内消息
-            dispatch_job(new SendMessageToUserJob($jobParams));
-            $creatorRepo->checkUpgrade0to1($creatorObj);
-        }
-        return json_success(['result' => 'success']);
-    }
-    /**
-     * 批量审核
-     * @return mixed
-     */
-    public function batchChangeCheck()
-    {
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $inputData = $this->getJsonData();
-        $rules = ['ids' => 'required', 'target_check' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $videoRepo = make(VideoRepository::class);
-        $targetCheck = intval(data_get($inputData, 'target_check', 0));
-        $arrIds = [];
-        if (is_string($inputData['ids'])) {
-            $arrIds = explode(',', $inputData['ids']);
-        } else {
-            $arrIds = $inputData['ids'];
-        }
-        $rejectReason = '您上传的视频不符合要求';
-        if (!empty($arrIds)) {
-            $creatorRepo = make(CreatorRepository::class);
-            foreach ($arrIds as $id) {
-                $obj = $videoRepo->find($id, ['id', 'title', 'status', 'type', 'check', 'reject_reason', 'updated_at', 'created_at', 'uid', 'online_at']);
-                if (empty($obj)) {
-                    continue;
-                }
-                if ($obj->check == $targetCheck) {
-                    continue;
-                }
-                if ($obj->status == 2 && $obj->check == 0) {
-                    // 未审核的条件
-                    $creatorObj = $creatorRepo->detail($obj->uid);
-                    $videoTitle = mb_substr($obj->title, 0, 30);
-                    $msgSubjct = '恭喜您,视频【' . $videoTitle . '】审核通过.';
-                    $msgContent = '您可以分享本APP给微信、qq群里的朋友,收益越大.';
-                    $obj->reject_reason = '';
-                    if ($targetCheck == 2) {
-                        $obj->reject_reason = $rejectReason;
-                        $obj->status = 2;
-                        $msgSubjct = '视频【' . $videoTitle . '】未通过审核';
-                        $msgContent = '拒绝原因:' . $rejectReason . ', 若有异议,请联系客服!';
-                    } elseif ($targetCheck == 1) {
-                        $obj->status = 1;
-                        //审核通过就直接上架.
-                        $obj->online_at = Carbon::now()->toDateTimeString();
-                        // 上架时间
-                        $jobParams = ['video_id' => $obj->id, 'type' => $obj->type, 'status' => 1, 'check' => $targetCheck];
-                        // 异步自动增加评论和点赞
-                        dispatch_job(new VideoAutoCommentJob($jobParams));
-                    }
-                    $obj->check = $targetCheck;
-                    $saveStatus = $obj->save();
-                    if ($saveStatus && !empty($creatorObj)) {
-                        $jobParams = ['from_type' => 'sys', 'receive_uid' => $obj->uid, 'subject' => $msgSubjct, 'content' => $msgContent];
-                        // 异步发送通知站内消息
-                        dispatch_job(new SendMessageToUserJob($jobParams));
-                        $creatorRepo->checkUpgrade0to1($creatorObj);
-                    }
-                }
-            }
-        }
-        return json_success(['result' => 'success']);
-    }
-}

+ 0 - 212
runtime/container/proxy/Modules_Manage_Controllers_VipCodeController.proxy.php

@@ -1,212 +0,0 @@
-<?php
-
-/**
- * 兑换码
- * @author ningque
- */
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Model\Mongo\VipCodeExchangeHistoryModel;
-use App\Model\VipCodeModel as Model;
-use App\Repositories\VipCodeRepository;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-class VipCodeController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 列表
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example param_json_data string:  {"handshake":"","data":{"page":1,"page_size":5,"search":{"title":"测试兑换码3","code":"","status":"","is_expire":""}}}
-     */
-    public function lists(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $page = isset($inputData['page']) ? (int) $inputData['page'] : 1;
-        $page_size = isset($inputData['page_size']) ? (int) $inputData['page_size'] : 20;
-        $select = ['*'];
-        $model = Model::query();
-        $search = isset($inputData['search']) ? $inputData['search'] : array();
-        if ($search) {
-            foreach ($search as $k => $v) {
-                if (!strlen((string) $v)) {
-                    continue;
-                }
-                switch ($k) {
-                    case "title":
-                    // 标题
-                    case "code":
-                        // 兑换码
-                        $model->where($k, 'like', "{$v}%");
-                        break;
-                    case "is_expire":
-                        // 是否查询已过期的,""-不过滤 1-已过期 0-未过期
-                        $now_date = date("Y-m-d");
-                        if ($v == '1') {
-                            //select * from vip_code where expire != "" and expire <= "2020-02-27"
-                            $model->whereRaw('expire != "" and expire <= "?"', [$now_date]);
-                        } else {
-                            //select * from vip_code where ( expire is NULL OR expire > "2020-02-27")
-                            $model->whereRaw('expire is NULL OR expire > "?"', [$now_date]);
-                        }
-                        break;
-                    default:
-                        $model->where($k, $v);
-                }
-            }
-        }
-        $result = $model->select($select)->orderBy('id', 'desc')->paginate($page_size, ['*'], 'page', $page);
-        return json_success($result);
-    }
-    /**
-     * 新增
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string:    {"handshake":"","data":{"title":"测试","remark":"备注","day":1,"type":1,"limit":9000,"expire":"2023-01-01","count":5}}
-     */
-    public function store(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['title' => 'required|string', 'remark' => 'string', 'day' => 'required|int', 'type' => 'required|int', 'limit' => 'required|int', 'expire' => 'nullable|string', 'count' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $vip_code = make(VipCodeRepository::class)->makeCode($inputData);
-        // 创建管理员日志
-        $logSubject = "创建兑换码";
-        $logSvalue = '';
-        $logDbData = ['after_items' => [], 'before_items' => []];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($vip_code);
-    }
-    /**
-     * 编辑
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string:   {"handshake":"","data":{"status":1,"id":1}}
-     */
-    public function update(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|int', 'status' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $info = Model::query()->where('id', $inputData['id'])->first();
-        if (!$info) {
-            return json_fail('兑换码信息不存在');
-        }
-        $result = Model::query()->where('id', $inputData['id'])->update(['status' => $inputData['status']]);
-        // 创建管理员日志
-        $olditem = clone $info;
-        $newitem = Model::query()->where('id', $inputData['id'])->first();
-        $logSubject = "修改兑换码";
-        $logSvalue = $olditem->id;
-        $logDbData = ['after_items' => [$newitem->toArray()], 'before_items' => [$olditem->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result);
-    }
-    /**
-     * 删除 (真实删除数据)
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @example  param_json_data string:    {"handshake":"","data":{"id":8}}
-     */
-    public function delete(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['id' => 'required|int'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $info = Model::query()->where('id', $inputData['id'])->first();
-        if (!$info) {
-            return json_fail('兑换码信息不存在');
-        }
-        $result = Model::query()->where('id', $inputData['id'])->delete();
-        if (!$result) {
-            return json_fail('删除失败');
-        }
-        // 创建管理员日志
-        $olditem = clone $info;
-        $logSubject = "删除兑换码";
-        $logSvalue = $olditem->id;
-        $logDbData = ['after_items' => [], 'before_items' => [$olditem->toArray()]];
-        $this->log($logSubject, $logSvalue, $logDbData);
-        return json_success($result);
-    }
-    /**
-     * 兑换记录(mongodb) - ok
-     * @param ValidatorFactoryInterface $validatorFactory
-     * @return mixed
-     * @author x.b
-     * @example param_json_data string:  {"handshake":"","data":{"page":1,"page_size":5,"search":{"nick":"","user_id":"","user_code":"","code":"","title":"","stime":"","otime":""}}}
-     * @example param_json_data string:  {"handshake":"","data":{"page":1,"page_size":5,"search":{"nick":"C5YU32","user_id":"32","user_code":"","code":"","title":"","stime":"2020-02-22 17:33:22","otime":"2020-02-29"}}}
-     */
-    public function history(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $page = isset($inputData['page']) ? (int) $inputData['page'] : 1;
-        $page_size = isset($inputData['page_size']) ? (int) $inputData['page_size'] : 20;
-        $where = [];
-        $search = isset($inputData['search']) ? $inputData['search'] : array();
-        if ($search) {
-            foreach ($search as $k => $v) {
-                if (!strlen((string) $v)) {
-                    continue;
-                }
-                switch ($k) {
-                    case "title":
-                    // 标题
-                    case "code":
-                    // 兑换码
-                    case "nick":
-                        // 用户名
-                        //$model->where($k, 'like', "{$v}%");  //mysql
-                        $where[$k] = ['$regex' => '/^' . $v . '/'];
-                        $where[$k] = $v;
-                        //暂时不提供like查询, - 这里是从mongodb库查询记录的
-                        break;
-                    case "user_id":
-                        // 用户id,mongodb中注意存储类型,需要为int
-                        $where[$k] = (int) $v;
-                        break;
-                    case "stime":
-                        // 自定义-开始日期
-                        //$model->where('created_at', '>=', $v);
-                        $where['created_at']['$gte'] = $v;
-                        break;
-                    case "otime":
-                        // 自定义-结束日期mong
-                        //$model->where('created_at', '<=', $v);
-                        $where['created_at']['$lte'] = $v;
-                        break;
-                    default:
-                        //$model->where($k, $v);
-                        $where[$k] = $v;
-                }
-            }
-        }
-        $skip = ($page - 1) * $page_size;
-        $options = ['skip' => $skip, 'limit' => $page_size, 'sort' => ['created_at' => -1]];
-        $total = make(VipCodeExchangeHistoryModel::class)->db()->countDocuments($where);
-        $data = make(VipCodeExchangeHistoryModel::class)->db()->find($where, $options)->toArray();
-        $result = ['data' => $data, 'total' => $total];
-        return json_success($result);
-    }
-}

+ 0 - 198
runtime/container/proxy/Modules_Manage_Controllers_WithdrawController.proxy.php

@@ -1,198 +0,0 @@
-<?php
-
-declare (strict_types=1);
-namespace Modules\Manage\Controllers;
-
-use App\Constants\ChangeLogConstant;
-use App\Model\UserModel;
-use App\Model\WithdrawalLogModel;
-use App\Model\WithdrawalMethodModel;
-use App\Repositories\Service\QueueService;
-use App\Repositories\UserRepository;
-use Hyperf\DbConnection\Db;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-/**
- *  提现相关
- */
-class WithdrawController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 提现方式列表
-     */
-    public function userWithdrawalMethodList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int', 'search' => 'nullable|array'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $userUid = $inputData['search']['user_uid'];
-        $type = $inputData['search']['type'];
-        return json_success(WithdrawalMethodModel::query()->where(function ($q) use($userUid, $type) {
-            if ($userUid) {
-                $q->where('user_uid', $userUid);
-            }
-            if ($type) {
-                $q->where('type', $type);
-            }
-        })->paginate((int) $inputData['page_size'], ['user_uid', 'type', 'username', 'account', 'bank', 'created_at'], 'page', (int) $inputData['page']));
-    }
-    /**
-     * 提现记录
-     * @return mixed
-     */
-    public function withdrawalLogList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int', 'search' => 'nullable|array'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $orderNumber = $inputData['search']['order_number'];
-        $status = $inputData['search']['status'];
-        return json_success(WithdrawalLogModel::query()->where('type', '!=', 4)->where(function ($q) use($orderNumber, $status) {
-            if ($orderNumber) {
-                $q->where('order_number', $orderNumber);
-            }
-            if ($status) {
-                $q->where('status', $status);
-            }
-        })->orderByDesc('created_at')->paginate((int) $inputData['page_size'], ['id', 'order_number', 'amount', 'type', 'username', 'user_uid', 'account', 'bank', 'balance_forward', 'balance_rear', 'freeze_forward', 'freeze_rear', 'usdt_to_amount', 'usdt_proportion', 'status', 'remark', 'created_at', 'updated_at'], 'page', (int) $inputData['page']));
-    }
-    /**
-     * 余额转金币列表
-     * @param ValidatorFactoryInterface $validatorFactory
-     */
-    public function BalanceChangeCoinList(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['page' => 'required|int', 'page_size' => 'required|int', 'search' => 'nullable|array'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $userUid = $inputData['search']['user_uid'];
-        return json_success(WithdrawalLogModel::query()->where('type', '=', 4)->where(function ($q) use($userUid) {
-            if ($userUid) {
-                $q->where('user_uid', $userUid);
-            }
-        })->paginate((int) $inputData['page_size'], ['id', 'user_uid', 'amount', 'balance_forward', 'balance_rear', 'coins', 'forward_coins', 'rear_coins', 'coin_proportion', 'created_at'], 'page', (int) $inputData['page']));
-    }
-    /**
-     * 操作接口
-     * @param ValidatorFactoryInterface $validatorFactory
-     */
-    public function operateWithdraw(ValidatorFactoryInterface $validatorFactory)
-    {
-        $inputData = $this->getJsonData();
-        $rules = ['status' => 'required|int', 'id' => 'required|int', 'remark' => 'nullable|string'];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $status = $inputData['status'];
-        //,2已到账,3失败,4冻结
-        $remark = $inputData['remark'];
-        //,2已到账,3失败,4冻结
-        // 查询提现记录
-        $withdrawalLogModel = WithdrawalLogModel::query()->where('id', $inputData['id'])->first();
-        if (!$withdrawalLogModel) {
-            return json_fail('没有该记录!');
-        }
-        if ($withdrawalLogModel->status !== 1) {
-            return json_fail('该订单无需操作!');
-        }
-        $oldWithdrawalLogModel = clone $withdrawalLogModel;
-        //查询会员
-        $userInfo = UserModel::query()->where('code', $withdrawalLogModel->user_uid)->first();
-        if (!$userInfo) {
-            return json_fail('会员不存在!');
-        }
-        $oldUserInfo = clone $userInfo;
-        $amount = $withdrawalLogModel->amount;
-        // 是否是usdt提现
-        if ($withdrawalLogModel->type === 1) {
-            $amount = $withdrawalLogModel->usdt_to_amount;
-        }
-        //查询会员
-        switch ($status) {
-            case 2:
-                //2已到账
-                Db::beginTransaction();
-                try {
-                    //会员扣除冻结
-                    $userInfo->freeze = $userInfo->freeze - $amount;
-                    if (!$userInfo->save()) {
-                        Db::rollBack();
-                        return json_fail('-001 订单出错!');
-                    }
-                    // 订单状态更换
-                    $withdrawalLogModel->status = 2;
-                    if (!$withdrawalLogModel->save()) {
-                        Db::rollBack();
-                        return json_fail('-002 订单出错!');
-                    }
-                    $this->log('操作提现(到账)订单号:' . $withdrawalLogModel->order_number, 2, ['after_items' => [$withdrawalLogModel->toArray()], 'before_items' => [$oldWithdrawalLogModel->toArray()]]);
-                    $this->log('操作提现(到账)订单扣除会员冻结资金,会员id:' . $userInfo->id, $amount, ['after_items' => [$userInfo->toArray()], 'before_items' => [$oldUserInfo->toArray()]]);
-                    make(UserRepository::class)->delUserCache($userInfo->code);
-                    Db::commit();
-                } catch (\Exception $exception) {
-                    Db::rollBack();
-                    return json_fail('-003 订单出错!');
-                }
-                break;
-            case 3:
-                //3失败
-                Db::beginTransaction();
-                try {
-                    //会员扣除冻结并且追加余额
-                    $userInfo->freeze = $userInfo->freeze - $amount;
-                    $userInfo->balance = $userInfo->balance + $amount;
-                    if (!$userInfo->save()) {
-                        Db::rollBack();
-                        return json_fail('-001 订单出错!');
-                    }
-                    // 订单状态更换
-                    $withdrawalLogModel->status = 3;
-                    $withdrawalLogModel->remark = $remark;
-                    if (!$withdrawalLogModel->save()) {
-                        Db::rollBack();
-                        return json_fail('-002 订单出错!');
-                    }
-                    $this->log('操作提现(失败)订单号:' . $withdrawalLogModel->order_number, 3, ['after_items' => [$withdrawalLogModel->toArray()], 'before_items' => [$oldWithdrawalLogModel->toArray()]]);
-                    $this->log('操作提现(失败)订单扣除会员冻结资金,会员id:' . $userInfo->id, $amount, ['after_items' => [$userInfo->toArray()], 'before_items' => [$oldUserInfo->toArray()]]);
-                    Db::commit();
-                    // 帐变记录
-                    $changeData = ['user_uid' => $userInfo->code, 'currency_type' => ChangeLogConstant::CHANGE_AMOUNT, 'amount' => $amount, 'way' => ChangeLogConstant::WAY_1, 'type' => ChangeLogConstant::TYPE_21];
-                    make(QueueService::class)->saveChangeLogJob($changeData);
-                } catch (\Exception $exception) {
-                    Db::rollBack();
-                    return json_fail('-023 订单出错!');
-                }
-                break;
-            case 4:
-                //4冻结
-                return json_fail('目前不支持!');
-                break;
-            default:
-                return json_fail('操作有误!');
-                break;
-        }
-        return json_success('订单操作成功');
-    }
-}

+ 0 - 49
runtime/container/proxy/Modules_Web_Controllers_BaseController.proxy.php

@@ -1,49 +0,0 @@
-<?php
-
-declare (strict_types=1);
-namespace Modules\Web\Controllers;
-
-use Hyperf\Di\Annotation\Inject;
-use Hyperf\HttpServer\Contract\RequestInterface;
-use Hyperf\HttpServer\Contract\ResponseInterface;
-use Psr\Container\ContainerInterface;
-class BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 容器接口.
-     *
-     * @Inject
-     * @var    ContainerInterface
-     */
-    protected $container;
-    /**
-     * 请求接口.
-     *
-     * @Inject
-     * @var    RequestInterface
-     */
-    protected $request;
-    /**
-     * 相应接口.
-     *
-     * @Inject
-     * @var    ResponseInterface
-     */
-    protected $response;
-    protected function jsonSuccess($data, $message = '操作成功')
-    {
-        $res = ['code' => 200, 'message' => $message, 'data' => $data, 'handshake' => ''];
-        return response()->json($res);
-    }
-    protected function jsonFail($message, $code = 500, $data = [])
-    {
-        $res = ['code' => $code, 'message' => $message, 'data' => $data, 'handshake' => ''];
-        return response()->json($res);
-    }
-}

+ 0 - 513
runtime/container/proxy/Modules_Web_Controllers_PcController.proxy.php

@@ -1,513 +0,0 @@
-<?php
-
-namespace Modules\Web\Controllers;
-
-use App\Constants\CreatorConstant;
-use App\Jobs\SavePcVideoCoverCebJob;
-use App\Model\TypeModel;
-use App\Model\TypeVideoModel;
-use App\Model\VideoModel;
-use App\Repositories\ConfigRepoistory;
-use App\Repositories\CreatorRepository;
-use App\Repositories\CreatorRuleRepository;
-use App\Repositories\UserRepository;
-use App\Repositories\Utils\MediaCenterRepository;
-use App\Repositories\VideoRepository;
-use Carbon\Carbon;
-use Hyperf\Validation\Contract\ValidatorFactoryInterface;
-use Modules\Web\Services\AuthService;
-use Psr\SimpleCache\CacheInterface;
-class PcController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 签名token/key
-     * @var string
-     */
-    private $signToken = 'uwgnnDtzTZR1xzoW';
-    /**
-     * @var null|AuthService
-     */
-    private $authService = null;
-    /**
-     * @var null|UserRepository
-     */
-    private $userRepo = null;
-    /**
-     * @var null|CacheInterface
-     */
-    private $cacheRepo = null;
-    public function index()
-    {
-        return 'pc-ok-pong';
-    }
-    /**
-     * 轮询登陆是否成功.
-     * @return mixed
-     * @throws \Psr\SimpleCache\InvalidArgumentException
-     */
-    public function lookup()
-    {
-        $qrcodeContent = trim(request()->input('qc', ''));
-        $qrFrom = request()->input('from', 'web');
-        $qrInfo = $this->getUserCodeByQrCode($qrcodeContent);
-        if (!empty($qrInfo['err_msg'])) {
-            return $this->jsonFail($qrInfo['err_msg'], 5001);
-        }
-        $realUserCode = '';
-        $userCode = $qrInfo['user_code'];
-        $userInfo = $this->getAuthInfo();
-        if (!empty($userInfo['code'])) {
-            return $this->jsonFail('授权无效1', 5002);
-        }
-        if ($userInfo['code'] !== $userCode) {
-            return $this->jsonFail('授权非法1', 5003);
-        }
-        $status = 2;
-        // 状态,1=拿到token,2=未拿到,未登陆状态
-        $cacheKey = $this->getAuthService()->getUserCacheKey($userCode);
-        $token = $this->getCacheRepo()->get($cacheKey, '');
-        if (empty($token)) {
-            $status = 1;
-        } else {
-            $realUserCode = $userCode;
-        }
-        $result = ['status' => $status, 'token' => $token, 'user_code' => $realUserCode];
-        return $this->jsonSuccess($result);
-    }
-    /**
-     * 检查是否合法登陆
-     * @return mixed
-     */
-    public function checkLogin()
-    {
-        $userInfo = $this->getAuthInfo();
-        if (empty($userInfo['code'])) {
-            return $this->jsonFail('授权无效', 5091);
-        }
-        $result = ['is_success' => true];
-        return $this->jsonSuccess($result);
-    }
-    public function setting()
-    {
-        $userInfo = $this->getAuthInfo();
-        if (empty($userInfo['code'])) {
-            return $this->jsonFail('授权无效', 5091);
-        }
-        $userCode = $userInfo['code'];
-        $configRepo = make(ConfigRepoistory::class);
-        $creatorRepo = make(CreatorRepository::class);
-        $ruleRepo = make(CreatorRuleRepository::class);
-        $detail = $creatorRepo->detail($userCode);
-        $todayCanUpload = false;
-        $level = 0;
-        $dayAddonNum = 0;
-        $dayVideo = 0;
-        if (!empty($detail)) {
-            $level = intval($detail->level);
-            $dayAddonNum = intval($detail->day_addon_num);
-            $dayVideo = intval($detail->day_video);
-        }
-        $ruleLevel = $ruleRepo->getRuleByLevel($level);
-        $dayMaxVideo = intval($ruleLevel->day_max_video) + $dayAddonNum;
-        $todayVideo = !empty($detail) ? $dayVideo : 0;
-        if ($todayVideo < $dayMaxVideo) {
-            $todayCanUpload = true;
-        }
-        $fileMaxSizeMb = CreatorConstant::VIDEO_MAX_SIZE_MB;
-        // 文件最大多少MB
-        $maxCoin = CreatorConstant::VIDEO_SELL_MAX_COIN;
-        // 最多设置金币个数
-        $creatorMinVideoNum = CreatorConstant::FREE_VIDEO_NUM;
-        // 创作者,level>0
-        $normalMinVideoNum = CreatorConstant::LEVEL_0_FREE_VIDEO_NUM;
-        // 普通人, level=0
-        $maxTagNum = CreatorConstant::VIDEO_TAG_MAX_NUM;
-        // 最多选择标签个数.
-        $tags = $creatorRepo->canUseTags();
-        $ppvodParams = $configRepo->gets(['ppvod_upload_category', 'ppvod_upload_tpl_id', 'ppvod_upload_tpl_name'], 'sys', []);
-        $isCanUploadCoin = isset($detail->coin_uper) ? boolval($detail->coin_uper) : false;
-        // 是否能传收费视频
-        $needUploadFreeNum = 0;
-        // 还需要上传免费视频个数.
-        $countFreeVideos = $creatorRepo->countPublishedCoinVideo($userCode, true);
-        // 统计免费视频个数
-        $countNotFreeVideos = $creatorRepo->countPublishedCoinVideo($userCode, false);
-        //统计收费视频个数
-        if ($level <= 0) {
-            if (CreatorConstant::LEVEL_0_FREE_VIDEO_NUM > 0) {
-                // 金币视频 x 免费要求 = 最低历史上传免费个数
-                $leastFreeNum = $countNotFreeVideos > 0 ? $countNotFreeVideos * CreatorConstant::LEVEL_0_FREE_VIDEO_NUM : CreatorConstant::LEVEL_0_FREE_VIDEO_NUM;
-                if ($countFreeVideos >= $leastFreeNum) {
-                    $isCanUploadCoin = true;
-                } else {
-                    $needUploadFreeNum = $leastFreeNum - $countFreeVideos;
-                }
-            } else {
-                $isCanUploadCoin = true;
-            }
-        } else {
-            if (CreatorConstant::FREE_VIDEO_NUM > 0) {
-                // 金币视频 x 免费要求 = 最低限制上传免费个数
-                $leastFreeNum = $countNotFreeVideos > 0 ? $countNotFreeVideos * CreatorConstant::FREE_VIDEO_NUM : CreatorConstant::FREE_VIDEO_NUM;
-                if ($countFreeVideos >= $leastFreeNum) {
-                    $isCanUploadCoin = true;
-                } else {
-                    $needUploadFreeNum = $leastFreeNum - $countFreeVideos;
-                }
-            } else {
-                $isCanUploadCoin = true;
-            }
-        }
-        $uploadIsMaintenance = false;
-        $uploadMaintenanceDesc = '';
-        $arrConfig = $configRepo->gets(['upload_maintenance_status', 'upload_maintenance_desc'], 'sys', []);
-        if (isset($arrConfig['upload_maintenance_status']) && intval($arrConfig['upload_maintenance_status']) == 1) {
-            $uploadIsMaintenance = true;
-            $uploadMaintenanceDesc = $arrConfig['upload_maintenance_desc'] ?? '上传维护中,请稍后恢复再试';
-        }
-        $result = ['user_id' => $userInfo['code'], 'nick' => $userInfo['nick'], 'level' => $level, 'today_can_upload' => $todayCanUpload, 'file_max_size_mb' => $fileMaxSizeMb, 'max_coin' => $maxCoin, 'creator_min_video_num' => $creatorMinVideoNum, 'normal_min_video_num' => $normalMinVideoNum, 'max_tag_num' => $maxTagNum, 'tags' => $tags, 'is_can_upload_coin' => $isCanUploadCoin, 'need_upload_free_num' => $needUploadFreeNum, 'count_free_videos' => $countFreeVideos, 'count_not_free_videos' => $countNotFreeVideos, 'upload_category' => !empty($ppvodParams['ppvod_upload_category']) ? $ppvodParams['ppvod_upload_category'] : '用户上传', 'upload_tpl_id' => !empty($ppvodParams['ppvod_upload_tpl_id']) ? $ppvodParams['ppvod_upload_tpl_id'] : '', 'upload_tpl_name' => !empty($ppvodParams['ppvod_upload_tpl_name']) ? $ppvodParams['ppvod_upload_tpl_name'] : '默认', 'upload_is_maintenance' => $uploadIsMaintenance, 'upload_maintenance_desc' => $uploadMaintenanceDesc];
-        return $this->jsonSuccess($result);
-    }
-    public function createVideo()
-    {
-        $userInfo = $this->getAuthInfo();
-        if (empty($userInfo['code'])) {
-            return $this->jsonFail('授权无效', 5091);
-        }
-        $userCode = $userInfo['code'];
-        $validatorFactory = make(ValidatorFactoryInterface::class);
-        $inputData = request()->all();
-        $rules = [
-            'title' => 'required',
-            'cover' => 'nullable|max:700',
-            'coins' => 'required|int',
-            'tags' => 'required',
-            // 这个是ID
-            'file_hash' => 'required',
-        ];
-        $validator = $validatorFactory->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            return json_fail($validator->errors()->first());
-        }
-        $videoRepo = make(VideoRepository::class);
-        if ($videoRepo->checkExist($inputData['file_hash'])) {
-            return $this->jsonFail('此视频已被其他人上传过,请重新更换', 6444);
-        }
-        $mediaCenterRepo = make(MediaCenterRepository::class);
-        $hashVideoInfo = $mediaCenterRepo->getHashInfo($inputData['file_hash']);
-        if (!empty($hashVideoInfo)) {
-            return $this->jsonFail('此视频有人上传过了,请重新更换', 6444);
-        }
-        $ruleRepo = make(CreatorRuleRepository::class);
-        $creatorRepo = make(CreatorRepository::class);
-        $detail = $creatorRepo->detail($userCode);
-        $level = 0;
-        $dayAddonNum = 0;
-        $dayVideo = 0;
-        if (!empty($detail)) {
-            $level = intval($detail->level);
-            $dayAddonNum = intval($detail->day_addon_num);
-            $dayVideo = intval($detail->day_video);
-        } else {
-            // 自动申请为原创者.
-            $detail = $creatorRepo->applyToUncheck($userCode);
-            $level = intval($detail->level);
-        }
-        $ruleLevel = $ruleRepo->getRuleByLevel($level);
-        $dayMaxVideo = intval($ruleLevel->day_max_video) + $dayAddonNum;
-        $todayVideo = !empty($detail) ? $dayVideo : 0;
-        if ($todayVideo >= $dayMaxVideo) {
-            return $this->jsonFail('今日已经超出上传数量限制');
-        }
-        $cover = trim(data_get($inputData, 'cover', ''));
-        $cover = substr($cover, 0, 255);
-        $coins = intval(data_get($inputData, 'coins', 0));
-        // 金币,单位数量个,10金币=1元人民币
-        $uploadingUrl = '';
-        // TODO,这里可以做一个固定视频,等待用户上传转码中.
-        if ($coins < 0) {
-            $coins = 0;
-        }
-        if ($coins > CreatorConstant::VIDEO_SELL_MAX_COIN) {
-            return $this->jsonFail('售卖金币价格太大,可以提前联系客服');
-        }
-        $arrTagIds = [];
-        $tmpTagIds = data_get($inputData, 'tags', '');
-        if (is_string($tmpTagIds)) {
-            $arrTagIds = explode(',', $tmpTagIds);
-        } else {
-            $arrTagIds = $tmpTagIds;
-        }
-        if (!empty($arrTagIds)) {
-            $arrTagIds = array_filter($arrTagIds);
-            $arrTagIds = array_unique($arrTagIds);
-        }
-        if (empty($arrTagIds)) {
-            return $this->jsonFail('请选择至少1个口味');
-        }
-        if (count($arrTagIds) > CreatorConstant::VIDEO_TAG_MAX_NUM) {
-            return $this->jsonFail('最多选择' . strval(CreatorConstant::VIDEO_TAG_MAX_NUM) . '个口味');
-        }
-        // 处理关联标签.
-        $tagIdsRaltion = [];
-        $tagNames = [];
-        if (!empty($arrTagIds)) {
-            foreach ($arrTagIds as $v) {
-                $tagObj = TypeModel::query()->where('id', $v)->first();
-                if (!empty($tagObj->id)) {
-                    $tagIdsRaltion[] = $tagObj->id;
-                    $tagNames[] = $tagObj->title;
-                }
-            }
-        }
-        $isCanUploadCoin = isset($detail->coin_uper) ? boolval($detail->coin_uper) : false;
-        // 是否能传收费视频
-        $needUploadFreeNum = 0;
-        // 还需要上传免费视频个数.
-        $countFreeVideos = $creatorRepo->countPublishedCoinVideo($userCode, true);
-        // 统计免费视频个数
-        $countNotFreeVideos = $creatorRepo->countPublishedCoinVideo($userCode, false);
-        //统计收费视频个数
-        if ($level <= 0) {
-            if (CreatorConstant::LEVEL_0_FREE_VIDEO_NUM > 0) {
-                // 金币视频 x 免费要求 = 最低历史上传免费个数
-                $leastFreeNum = $countNotFreeVideos > 0 ? $countNotFreeVideos * CreatorConstant::LEVEL_0_FREE_VIDEO_NUM : CreatorConstant::LEVEL_0_FREE_VIDEO_NUM;
-                if ($countFreeVideos >= $leastFreeNum) {
-                    $isCanUploadCoin = true;
-                } else {
-                    $needUploadFreeNum = $leastFreeNum - $countFreeVideos;
-                }
-            } else {
-                $isCanUploadCoin = true;
-            }
-        } else {
-            if (CreatorConstant::FREE_VIDEO_NUM > 0) {
-                // 金币视频 x 免费要求 = 最低限制上传免费个数
-                $leastFreeNum = $countNotFreeVideos > 0 ? $countNotFreeVideos * CreatorConstant::FREE_VIDEO_NUM : CreatorConstant::FREE_VIDEO_NUM;
-                if ($countFreeVideos >= $leastFreeNum) {
-                    $isCanUploadCoin = true;
-                } else {
-                    $needUploadFreeNum = $leastFreeNum - $countFreeVideos;
-                }
-            } else {
-                $isCanUploadCoin = true;
-            }
-        }
-        if ($coins > 0 && !$isCanUploadCoin) {
-            return $this->jsonFail('还不能上传收费视频,请先再传' . strval($needUploadFreeNum) . '个免费视频');
-        }
-        $payType = 2;
-        // 默认金币
-        if ($coins == 0) {
-            $payType = 1;
-            // vip
-        }
-        $newStrTagNames = !empty($tagNames) ? implode(',', $tagNames) : '';
-        $newStrTagIds = !empty($arrTagIds) ? implode(',', $arrTagIds) : '';
-        $title = trim(data_get($inputData, 'title', ''));
-        $title = mb_substr($title, 0, 24);
-        $fileHash = trim(data_get($inputData, 'file_hash', ''));
-        $fileHash = substr($fileHash, 0, 32);
-        $setarr = ['uid' => $userCode, 'status' => 3, 'check' => 0, 'pay_type' => $payType, 'type' => 1, 'mu' => $uploadingUrl, 'title' => $title, 'cover' => $cover, 'coins' => $coins, 'tags' => $newStrTagNames, 'file_hash' => $fileHash, 'custom_cover' => $cover];
-        $videoObj = VideoModel::query()->create($setarr);
-        if ($videoObj) {
-            $videoId = $videoObj->id;
-            if (!empty($tagIdsRaltion)) {
-                foreach ($tagIdsRaltion as $tagId) {
-                    $setarr2 = ['type_id' => $tagId, 'video_id' => $videoId, 'status' => 1];
-                    TypeVideoModel::query()->create($setarr2);
-                }
-            }
-            // 累加今日上传视频数量.
-            $detail->day_video++;
-            $detail->save();
-            if (!empty($cover)) {
-                $coverFileName = basename($cover);
-                $coverExt = $this->fileExt($coverFileName);
-                if ($coverExt != 'ceb' && in_array($coverExt, ['jpg', 'jpeg', 'png', 'gif'])) {
-                    $jobParams = ['video_id' => $videoId, 'cover' => $cover];
-                    dispatch_job(new SavePcVideoCoverCebJob($jobParams));
-                }
-            }
-        } else {
-            return $this->jsonFail('创建视频失败');
-        }
-        $result = ['video' => ['id' => $videoObj->id]];
-        return $this->jsonSuccess($result);
-    }
-    /**
-     * 二维码登陆
-     * @return mixed
-     * @throws \Psr\SimpleCache\InvalidArgumentException
-     */
-    public function qrcodeLogin()
-    {
-        $qrcodeContent = trim(request()->input('qc', ''));
-        $qrFrom = request()->input('from', 'web');
-        $qrInfo = $this->getUserCodeByQrCode($qrcodeContent);
-        if (!empty($qrInfo['err_msg'])) {
-            return $this->jsonFail($qrInfo['err_msg']);
-        }
-        $userCode = $qrInfo['user_code'];
-        //        $cacheKey = $this->getAuthService()->getUserCacheKey($userCode);
-        //        $token = $this->getCacheRepo()->get($cacheKey);
-        $tokenInfo = $this->getAuthService()->createSingleJwt($userCode);
-        $token = $tokenInfo['token'];
-        $result = ['token' => $token, 'user_code' => $userCode];
-        return $this->jsonSuccess($result);
-    }
-    public function upAuth()
-    {
-        $userInfo = $this->getAuthInfo();
-        if (empty($userInfo['code'])) {
-            logger('upAuth', ['msg' => '[4]握手失败']);
-            return response('[4]握手失败', 500);
-        }
-        $queryUserCode = $userInfo['code'];
-        $inputData = request()->all();
-        $rules = ['auth_event' => 'required', 'auth_timestamp' => 'required', 'app_name' => 'required', 'auth_user' => 'required', 'auth_sign' => 'required|string', 'file_hash' => 'nullable', 'file_origin_name' => 'nullable', 'file_ext' => 'nullable'];
-        $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
-        if ($validator->fails()) {
-            // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
-            logger('upAuth', ['msg' => $validator->errors()->first()]);
-            return response($validator->errors()->first(), 500);
-        }
-        $authTimestamp = strval(data_get($inputData, 'auth_timestamp', ''));
-        $appName = data_get($inputData, 'app_name', '');
-        $authUserCode = data_get($inputData, 'auth_user', '');
-        $authSign = data_get($inputData, 'auth_sign', '');
-        $authEvent = data_get($inputData, 'auth_event', '');
-        $fileOriginName = data_get($inputData, 'file_origin_name', '');
-        $fileHash = data_get($inputData, 'file_hash', '');
-        $fileExt = strtolower(data_get($inputData, 'file_ext', ''));
-        $tmpTimestamp = substr($authTimestamp, 0, 10);
-        if (abs(Carbon::createFromTimestamp($tmpTimestamp)->diffInMinutes(Carbon::now())) > 30) {
-            logger('upAuth', ['msg' => '[5]握手失败']);
-            return response('[5]握手失败', 500);
-        }
-        $inSign = $this->createSign($authTimestamp, $appName, $authUserCode, $authEvent);
-        if ($inSign !== $authSign) {
-            logger('upAuth', ['msg' => '[3]握手失败']);
-            return response('[3]握手失败', 500);
-        }
-        if (empty($queryUserCode) || $queryUserCode !== $authUserCode) {
-            logger('upAuth', ['msg' => '[6]握手失败']);
-            return response('[6]握手失败', 500);
-        }
-        return response('success', 200);
-    }
-    /**
-     * 获取认证里的用户信息.
-     * @return array
-     */
-    private function getAuthInfo()
-    {
-        $authInfo = $this->getAuthService()->getTokenUserInfo();
-        if (empty($authInfo['user_id'])) {
-            return [];
-        }
-        $userInfo = $this->getAuthService()->checkValid($authInfo['user_id']);
-        if (empty($userInfo)) {
-            return [];
-        }
-        $userInfo['user_id'] = $userInfo['code'];
-        // 兼容.
-        return $userInfo;
-    }
-    /**
-     * 获取服务.
-     * @return mixed|AuthService
-     */
-    private function getAuthService()
-    {
-        if (!$this->authService instanceof AuthService) {
-            $this->authService = make(AuthService::class);
-        }
-        return $this->authService;
-    }
-    /**
-     * 获取用户仓库.
-     * @return UserRepository|mixed
-     */
-    private function getUserRepo()
-    {
-        if (!$this->userRepo instanceof UserRepository) {
-            $this->userRepo = make(UserRepository::class);
-        }
-        return $this->userRepo;
-    }
-    /**
-     * 获取缓存仓库.
-     * @return mixed|CacheInterface
-     */
-    private function getCacheRepo()
-    {
-        if (!$this->cacheRepo instanceof CacheInterface) {
-            $this->cacheRepo = make(CacheInterface::class);
-        }
-        return $this->cacheRepo;
-    }
-    /**
-     * 通过二维码内容获取用户code.
-     * @param $qrcodeContent
-     * @return string[]
-     */
-    private function getUserCodeByQrCode($qrcodeContent)
-    {
-        $result = ['err_msg' => '', 'user_code' => ''];
-        if (empty($qrcodeContent)) {
-            $result['err_msg'] = '无效的二维码1';
-            return $result;
-        }
-        $txt = $qrcodeContent;
-        if (empty($txt)) {
-            $result['err_msg'] = '无效的二维码2';
-            return $result;
-        }
-        $account = hand_decrypt($txt, $this->getUserRepo()->getAcKey(), $this->getUserRepo()->getAcIv());
-        if (empty($account)) {
-            $result['err_msg'] = '无效的二维码3';
-            return $result;
-        }
-        $pattern = '/^user:\\/\\/([a-zA-Z0-9]{6,12})/';
-        preg_match($pattern, $account, $matches);
-        if (empty($matches[1])) {
-            $result['err_msg'] = '无效的二维码4';
-            return $result;
-        }
-        $userCode = $matches[1];
-        $userInfo = $this->getUserRepo()->getUserInfoFromCache($userCode);
-        if (empty($userInfo['code'])) {
-            $result['err_msg'] = '无效的二维码5';
-            return $result;
-        }
-        $result['user_code'] = $userCode;
-        return $result;
-    }
-    /**
-     * @param $timestamp
-     * @param $appName
-     * @param $userCode
-     * @return string
-     */
-    private function createSign($timestamp, $appName, $userCode, $authEvent)
-    {
-        $strParams = $appName . '-' . $authEvent . '-' . $userCode . '-' . $timestamp;
-        $strSign = md5(md5($strParams) . '-' . $this->signToken);
-        return $strSign;
-    }
-    private function fileExt($filename)
-    {
-        return strtolower(trim(substr(strrchr($filename, '.'), 1)));
-    }
-}

+ 0 - 137
runtime/container/proxy/Modules_Web_Controllers_PromotionController.proxy.php

@@ -1,137 +0,0 @@
-<?php
-
-namespace Modules\Web\Controllers;
-
-use App\Model\UserModel;
-use App\Repositories\Utils\M3u8CacheRepository;
-use Carbon\Carbon;
-use Psr\SimpleCache\CacheInterface;
-class PromotionController extends BaseController
-{
-    use \Hyperf\Di\Aop\ProxyTrait;
-    use \Hyperf\Di\Aop\PropertyHandlerTrait;
-    function __construct()
-    {
-        if (method_exists(parent::class, '__construct')) {
-            parent::__construct(...func_get_args());
-        }
-        $this->__handlePropertyHandler(__CLASS__);
-    }
-    /**
-     * 20220910 H5活动
-     */
-    public function top20220910()
-    {
-        $cacheRepo = make(CacheInterface::class);
-        $cacheTime = 1 * 60 * 60 - 1;
-        $cacheKey = 'hd:20220910_top20';
-        if (env('APP_ENV') != 'prod') {
-            $startObj = Carbon::create(2022, 1, 2)->startOfDay();
-        } else {
-            $startObj = Carbon::create(2022, 9, 9)->startOfDay();
-            //            $startObj = Carbon::create(2022, 03, 01)->startOfDay();
-        }
-        $endObj = Carbon::create(2022, 10, 9)->startOfDay();
-        $fakeNum = 3;
-        $limitNum = 20;
-        $fakeUsers = [];
-        $fakeDoukuiUsers = ['bdPY45', 'bXq7LV', 'Z4LmKQ'];
-        $fakeChujiUsers = ['VWwW2D', 'VAG1vZ', 'ox2Jxb'];
-        if (preg_match('/doukui/i', env('APP_NAME'))) {
-            $fakeUsers = $fakeDoukuiUsers;
-        } else {
-            $fakeUsers = $fakeChujiUsers;
-        }
-        $result = $cacheRepo->remember($cacheKey, $cacheTime, function () use($startObj, $endObj, $fakeNum, $limitNum, $fakeUsers) {
-            $result = [];
-            $endAt = clone $endObj;
-            $lists = UserModel::query()->distinct()->where('parent_uid', '!=', '')->whereBetween('created_at', [$startObj, $endObj])->groupBy(['parent_uid'])->orderByDesc('invite_num')->orderBy('id', 'ASC')->take($limitNum)->selectRaw('parent_uid, count(id) AS `invite_num`')->get();
-            if ($lists->isNotEmpty()) {
-                $nowDate = Carbon::now();
-                $fakeStartObj = (clone $endAt)->subHours(5)->addMinutes(27);
-                $diffDays = (clone $fakeStartObj)->diffInDays(Carbon::now());
-                $no1Position = $diffDays + 1;
-                $no2Position = $diffDays + 4;
-                $no3Position = $diffDays + 6;
-                $previousNum = 0;
-                $firstNum = 0;
-                $k = 1;
-                foreach ($lists as $v1) {
-                    $userObj = UserModel::query()->where(['code' => $v1->parent_uid])->first(['id', 'code', 'nick', 'avatar']);
-                    if (!empty($userObj)) {
-                        $inviteNum = intval($v1->invite_num);
-                        $item = ['code' => $userObj->code, 'avatar' => $userObj->avatar, 'nick' => $userObj->nick, 'invite_num' => $inviteNum];
-                        $diffNum = $previousNum - $inviteNum;
-                        if ($nowDate > $fakeStartObj) {
-                            if ($k == 1) {
-                                // 临近尾声
-                                $fakeInviteNum = $inviteNum;
-                                $fakeInviteNum += 7;
-                                $fakeUserCode = $fakeUsers[2];
-                                $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
-                                $fakeItem3 = ['code' => $fakeUserObj->code, 'avatar' => $fakeUserObj->avatar, 'nick' => $fakeUserObj->nick, 'invite_num' => $fakeInviteNum];
-                                $fakeInviteNum += 15;
-                                $fakeUserCode = $fakeUsers[1];
-                                $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
-                                $fakeItem2 = ['code' => $fakeUserObj->code, 'avatar' => $fakeUserObj->avatar, 'nick' => $fakeUserObj->nick, 'invite_num' => $fakeInviteNum];
-                                $fakeInviteNum += 29;
-                                $fakeUserCode = $fakeUsers[0];
-                                $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
-                                $fakeItem1 = ['code' => $fakeUserObj->code, 'avatar' => $fakeUserObj->avatar, 'nick' => $fakeUserObj->nick, 'invite_num' => $fakeInviteNum];
-                                $result[] = $fakeItem1;
-                                $result[] = $fakeItem2;
-                                $result[] = $fakeItem3;
-                            }
-                        } else {
-                            if ($k == $no1Position) {
-                                if ($diffNum > 1) {
-                                    $fakeInviteNum = $inviteNum + intval($diffNum / 2);
-                                } else {
-                                    $fakeInviteNum = $inviteNum;
-                                }
-                                $fakeUserCode = $fakeUsers[0];
-                                $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
-                                $fakeItem = ['code' => $fakeUserObj->code, 'avatar' => $fakeUserObj->avatar, 'nick' => $fakeUserObj->nick, 'invite_num' => $fakeInviteNum];
-                                $result[] = $fakeItem;
-                            } elseif ($k == $no2Position) {
-                                if ($diffNum > 1) {
-                                    $fakeInviteNum = $inviteNum + intval($diffNum / 2);
-                                } else {
-                                    $fakeInviteNum = $inviteNum;
-                                }
-                                $fakeUserCode = $fakeUsers[1];
-                                $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
-                                $fakeItem = ['code' => $fakeUserObj->code, 'avatar' => $fakeUserObj->avatar, 'nick' => $fakeUserObj->nick, 'invite_num' => $fakeInviteNum];
-                                $result[] = $fakeItem;
-                            } elseif ($k == $no3Position) {
-                                if ($diffNum > 1) {
-                                    $fakeInviteNum = $inviteNum + intval($diffNum / 2);
-                                } else {
-                                    $fakeInviteNum = $inviteNum;
-                                }
-                                $fakeUserCode = $fakeUsers[2];
-                                $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
-                                $fakeItem = ['code' => $fakeUserObj->code, 'avatar' => $fakeUserObj->avatar, 'nick' => $fakeUserObj->nick, 'invite_num' => $fakeInviteNum];
-                                $result[] = $fakeItem;
-                            }
-                        }
-                        $result[] = $item;
-                        $previousNum = $inviteNum;
-                    }
-                    $k++;
-                }
-                $arrLen = count($result);
-                if (!empty($result) && $arrLen >= $limitNum) {
-                    $result = array_slice($result, 0, $limitNum, false);
-                }
-            }
-            return $result;
-        });
-        if (!empty($result)) {
-            foreach ($result as &$v) {
-                $v['avatar'] = M3u8CacheRepository::getImageUrl($v['avatar']);
-            }
-        }
-        return $this->jsonSuccess($result);
-    }
-}

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 162
runtime/container/proxy/Modules_Web_Controllers_TurntableController.proxy.php


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


+ 0 - 1
runtime/hyperf.pid

@@ -1 +0,0 @@
-332

+ 0 - 132
runtime/logs/hyperf-2022-05-02.log

@@ -1,132 +0,0 @@
-[2022-05-02 03:07:55] queue.INFO: [2022-05-02 03:07:55] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-05-02 03:07:56] log.ERROR: 亲,换个支付方式试试呢?[258] in /var/www/chuji_server/app/Repositories/Service/PaymentService.php [] []
-[2022-05-02 03:07:56] queue.INFO: [2022-05-02 03:07:56] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-02 03:07:56] log.ERROR: #0 /var/www/chuji_server/runtime/container/proxy/Modules_Api_Controllers_VipController.proxy.php(64): App\Repositories\Service\PaymentService->createPayLink()
-#1 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(161): Modules\Api\Controllers\VipController->buyvip()
-#2 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(113): Hyperf\HttpServer\CoreMiddleware->handleFound()
-#3 /var/www/chuji_server/app/Middlewares/AppCoreMiddleware.php(41): Hyperf\HttpServer\CoreMiddleware->process()
-#4 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): App\Middlewares\AppCoreMiddleware->process()
-#5 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#6 /var/www/chuji_server/Modules/Api/Middlewares/ApiAuthMiddleware.php(99): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#7 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): Modules\Api\Middlewares\ApiAuthMiddleware->process()
-#8 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#9 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpDispatcher.php(40): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#10 /var/www/chuji_server/vendor/hyperf/http-server/src/Server.php(117): Hyperf\Dispatcher\HttpDispatcher->dispatch()
-#11 {main} [] []
-[2022-05-02 03:07:56] queue.INFO: [2022-05-02 03:07:56] Processed App\Jobs\AgentOrderIncJob. [] []
-[2022-05-02 03:07:56] queue.INFO: [2022-05-02 03:07:56] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-02 03:08:31] queue.INFO: [2022-05-02 03:08:31] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-05-02 03:08:32] log.ERROR: 亲,换个支付方式试试呢?[258] in /var/www/chuji_server/app/Repositories/Service/PaymentService.php [] []
-[2022-05-02 03:08:32] log.ERROR: #0 /var/www/chuji_server/runtime/container/proxy/Modules_Api_Controllers_VipController.proxy.php(64): App\Repositories\Service\PaymentService->createPayLink()
-#1 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(161): Modules\Api\Controllers\VipController->buyvip()
-#2 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(113): Hyperf\HttpServer\CoreMiddleware->handleFound()
-#3 /var/www/chuji_server/app/Middlewares/AppCoreMiddleware.php(41): Hyperf\HttpServer\CoreMiddleware->process()
-#4 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): App\Middlewares\AppCoreMiddleware->process()
-#5 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#6 /var/www/chuji_server/Modules/Api/Middlewares/ApiAuthMiddleware.php(99): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#7 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): Modules\Api\Middlewares\ApiAuthMiddleware->process()
-#8 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#9 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpDispatcher.php(40): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#10 /var/www/chuji_server/vendor/hyperf/http-server/src/Server.php(117): Hyperf\Dispatcher\HttpDispatcher->dispatch()
-#11 {main} [] []
-[2022-05-02 03:08:32] queue.INFO: [2022-05-02 03:08:32] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-02 03:08:32] queue.INFO: [2022-05-02 03:08:32] Processed App\Jobs\AgentOrderIncJob. [] []
-[2022-05-02 03:08:33] queue.INFO: [2022-05-02 03:08:33] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-02 03:09:06] queue.INFO: [2022-05-02 03:09:06] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-05-02 03:09:06] log.ERROR: 亲,换个支付方式试试呢?[258] in /var/www/chuji_server/app/Repositories/Service/PaymentService.php [] []
-[2022-05-02 03:09:06] queue.INFO: [2022-05-02 03:09:06] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-02 03:09:06] log.ERROR: #0 /var/www/chuji_server/runtime/container/proxy/Modules_Api_Controllers_VipController.proxy.php(64): App\Repositories\Service\PaymentService->createPayLink()
-#1 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(161): Modules\Api\Controllers\VipController->buyvip()
-#2 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(113): Hyperf\HttpServer\CoreMiddleware->handleFound()
-#3 /var/www/chuji_server/app/Middlewares/AppCoreMiddleware.php(41): Hyperf\HttpServer\CoreMiddleware->process()
-#4 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): App\Middlewares\AppCoreMiddleware->process()
-#5 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#6 /var/www/chuji_server/Modules/Api/Middlewares/ApiAuthMiddleware.php(99): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#7 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): Modules\Api\Middlewares\ApiAuthMiddleware->process()
-#8 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#9 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpDispatcher.php(40): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#10 /var/www/chuji_server/vendor/hyperf/http-server/src/Server.php(117): Hyperf\Dispatcher\HttpDispatcher->dispatch()
-#11 {main} [] []
-[2022-05-02 03:09:06] queue.INFO: [2022-05-02 03:09:06] Processed App\Jobs\AgentOrderIncJob. [] []
-[2022-05-02 03:09:07] queue.INFO: [2022-05-02 03:09:07] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-02 03:09:37] queue.INFO: [2022-05-02 03:09:37] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-05-02 03:09:37] log.ERROR: 亲,换个支付方式试试呢?[258] in /var/www/chuji_server/app/Repositories/Service/PaymentService.php [] []
-[2022-05-02 03:09:37] log.ERROR: #0 /var/www/chuji_server/runtime/container/proxy/Modules_Api_Controllers_VipController.proxy.php(64): App\Repositories\Service\PaymentService->createPayLink()
-#1 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(161): Modules\Api\Controllers\VipController->buyvip()
-#2 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(113): Hyperf\HttpServer\CoreMiddleware->handleFound()
-#3 /var/www/chuji_server/app/Middlewares/AppCoreMiddleware.php(41): Hyperf\HttpServer\CoreMiddleware->process()
-#4 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): App\Middlewares\AppCoreMiddleware->process()
-#5 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#6 /var/www/chuji_server/Modules/Api/Middlewares/ApiAuthMiddleware.php(99): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#7 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): Modules\Api\Middlewares\ApiAuthMiddleware->process()
-#8 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#9 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpDispatcher.php(40): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#10 /var/www/chuji_server/vendor/hyperf/http-server/src/Server.php(117): Hyperf\Dispatcher\HttpDispatcher->dispatch()
-#11 {main} [] []
-[2022-05-02 03:09:37] queue.INFO: [2022-05-02 03:09:37] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-02 03:09:37] queue.INFO: [2022-05-02 03:09:37] Processed App\Jobs\AgentOrderIncJob. [] []
-[2022-05-02 03:09:38] queue.INFO: [2022-05-02 03:09:38] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-02 03:10:58] queue.INFO: [2022-05-02 03:10:58] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-05-02 03:10:58] log.ERROR: 亲,换个支付方式试试呢?[258] in /var/www/chuji_server/app/Repositories/Service/PaymentService.php [] []
-[2022-05-02 03:10:58] queue.INFO: [2022-05-02 03:10:58] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-02 03:10:58] log.ERROR: #0 /var/www/chuji_server/runtime/container/proxy/Modules_Api_Controllers_VipController.proxy.php(64): App\Repositories\Service\PaymentService->createPayLink()
-#1 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(161): Modules\Api\Controllers\VipController->buyvip()
-#2 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(113): Hyperf\HttpServer\CoreMiddleware->handleFound()
-#3 /var/www/chuji_server/app/Middlewares/AppCoreMiddleware.php(41): Hyperf\HttpServer\CoreMiddleware->process()
-#4 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): App\Middlewares\AppCoreMiddleware->process()
-#5 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#6 /var/www/chuji_server/Modules/Api/Middlewares/ApiAuthMiddleware.php(99): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#7 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): Modules\Api\Middlewares\ApiAuthMiddleware->process()
-#8 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#9 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpDispatcher.php(40): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#10 /var/www/chuji_server/vendor/hyperf/http-server/src/Server.php(117): Hyperf\Dispatcher\HttpDispatcher->dispatch()
-#11 {main} [] []
-[2022-05-02 03:10:58] queue.INFO: [2022-05-02 03:10:58] Processed App\Jobs\AgentOrderIncJob. [] []
-[2022-05-02 03:10:59] queue.INFO: [2022-05-02 03:10:59] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-02 03:12:19] queue.INFO: [2022-05-02 03:12:19] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-05-02 03:12:19] log.ERROR: 亲,换个支付方式试试呢?[258] in /var/www/chuji_server/app/Repositories/Service/PaymentService.php [] []
-[2022-05-02 03:12:19] log.ERROR: #0 /var/www/chuji_server/runtime/container/proxy/Modules_Api_Controllers_VipController.proxy.php(64): App\Repositories\Service\PaymentService->createPayLink()
-#1 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(161): Modules\Api\Controllers\VipController->buyvip()
-#2 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(113): Hyperf\HttpServer\CoreMiddleware->handleFound()
-#3 /var/www/chuji_server/app/Middlewares/AppCoreMiddleware.php(41): Hyperf\HttpServer\CoreMiddleware->process()
-#4 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): App\Middlewares\AppCoreMiddleware->process()
-#5 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#6 /var/www/chuji_server/Modules/Api/Middlewares/ApiAuthMiddleware.php(99): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#7 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): Modules\Api\Middlewares\ApiAuthMiddleware->process()
-#8 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#9 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpDispatcher.php(40): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#10 /var/www/chuji_server/vendor/hyperf/http-server/src/Server.php(117): Hyperf\Dispatcher\HttpDispatcher->dispatch()
-#11 {main} [] []
-[2022-05-02 03:12:19] queue.INFO: [2022-05-02 03:12:19] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-02 03:12:20] queue.INFO: [2022-05-02 03:12:20] Processed App\Jobs\AgentOrderIncJob. [] []
-[2022-05-02 03:12:20] queue.INFO: [2022-05-02 03:12:20] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-02 03:13:05] queue.INFO: [2022-05-02 03:13:05] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-05-02 03:13:05] queue.INFO: [2022-05-02 03:13:05] Processed App\Jobs\AgentOrderIncJob. [] []
-[2022-05-02 03:45:13] log.INFO: {"busId":"10087","orderNo":"DK202205020331023698","orderAmount":"30.00","sign":"1b17895a055291dd3f66405a2d38f1b6","notifyUrl":"http:\/\/dk-server.test.wg8.site\/notify\/1\/2503\/Wh","channelProductId":"1007","callbackUrl":"http:\/\/dk-server.test.wg8.site"}发送回调信息! [] []
-[2022-05-02 03:45:13] queue.INFO: [2022-05-02 03:45:13] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-02 03:45:14] queue.INFO: [2022-05-02 03:45:14] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-02 03:45:14] queue.INFO: [2022-05-02 03:45:14] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-02 03:45:15] queue.INFO: [2022-05-02 03:45:15] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-02 03:46:03] log.INFO: {"busId":"10087","orderNo":"DK202205020331023698","orderAmount":"30.00","sign":"1b17895a055291dd3f66405a2d38f1b6","notifyUrl":"http:\/\/dk-server.test.wg8.site\/notify\/1\/2503\/Wh","channelProductId":"1007","callbackUrl":"http:\/\/dk-server.test.wg8.site"}发送回调信息! [] []
-[2022-05-02 03:46:03] queue.INFO: [2022-05-02 03:46:03] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-02 03:46:03] queue.INFO: [2022-05-02 03:46:03] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-02 03:46:03] queue.INFO: [2022-05-02 03:46:03] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-02 03:46:04] queue.INFO: [2022-05-02 03:46:04] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-02 03:46:24] log.INFO: {"busId":"10087","orderNo":"DK202205020331023698","orderAmount":"30.00","sign":"1b17895a055291dd3f66405a2d38f1b6","notifyUrl":"http:\/\/dk-server.test.wg8.site\/notify\/1\/2503\/Wh","channelProductId":"1007","callbackUrl":"http:\/\/dk-server.test.wg8.site"}发送回调信息! [] []
-[2022-05-02 03:46:24] queue.INFO: [2022-05-02 03:46:24] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-02 03:46:24] queue.INFO: [2022-05-02 03:46:24] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-02 03:46:25] log.INFO: 订单状态异常: [null] []
-[2022-05-02 03:47:13] log.INFO: {"busId":"10087","orderNo":"DK202205020331023698","orderAmount":"30.00","sign":"1b17895a055291dd3f66405a2d38f1b6","notifyUrl":"http:\/\/dk-server.test.wg8.site\/notify\/1\/2503\/Wh","channelProductId":"1007","callbackUrl":"http:\/\/dk-server.test.wg8.site"}发送回调信息! [] []
-[2022-05-02 03:47:13] queue.INFO: [2022-05-02 03:47:13] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-02 03:47:14] queue.INFO: [2022-05-02 03:47:14] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-02 03:47:14] log.INFO: 订单状态异常: [null] []
-[2022-05-02 03:47:30] log.INFO: {"busId":"10087","orderNo":"DK202205020331023698","orderAmount":"30.00","sign":"1b17895a055291dd3f66405a2d38f1b6","notifyUrl":"http:\/\/dk-server.test.wg8.site\/notify\/1\/2503\/Wh","channelProductId":"1007","callbackUrl":"http:\/\/dk-server.test.wg8.site"}发送回调信息! [] []
-[2022-05-02 03:47:30] queue.INFO: [2022-05-02 03:47:30] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-02 03:47:30] queue.INFO: [2022-05-02 03:47:30] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-02 03:47:30] log.INFO: 订单状态异常: [null] []
-[2022-05-02 03:47:47] log.INFO: {"busId":"10087","orderNo":"DK202205020331023698","orderAmount":"30.00","sign":"1b17895a055291dd3f66405a2d38f1b6","notifyUrl":"http:\/\/dk-server.test.wg8.site\/notify\/1\/2503\/Wh","channelProductId":"1007","callbackUrl":"http:\/\/dk-server.test.wg8.site"}发送回调信息! [] []
-[2022-05-02 03:47:47] queue.INFO: [2022-05-02 03:47:47] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-02 03:47:47] queue.INFO: [2022-05-02 03:47:47] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-02 03:47:47] queue.INFO: [2022-05-02 03:47:47] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-05-02 03:47:48] queue.INFO: [2022-05-02 03:47:48] Processing App\Jobs\RebateUserJob. [] []
-[2022-05-02 03:47:48] queue.INFO: [2022-05-02 03:47:48] Processed App\Jobs\RebateUserJob. [] []

+ 0 - 205
runtime/logs/hyperf-2022-05-03.log

@@ -1,205 +0,0 @@
-[2022-05-03 19:37:01] queue.INFO: [2022-05-03 19:37:01] Processing App\Jobs\RefreshLoginTimeJob. [] []
-[2022-05-03 19:37:01] queue.INFO: [2022-05-03 19:37:01] Processed App\Jobs\RefreshLoginTimeJob. [] []
-[2022-05-03 19:37:01] queue.INFO: [2022-05-03 19:37:01] Processing App\Jobs\InitSysMessageJob. [] []
-[2022-05-03 19:37:01] queue.INFO: [2022-05-03 19:37:01] Processing App\Jobs\AddHyperLogLogJob. [] []
-[2022-05-03 19:37:01] queue.INFO: [2022-05-03 19:37:01] Processing App\Jobs\SentTaskRewardJob. [] []
-[2022-05-03 19:37:01] queue.INFO: [2022-05-03 19:37:01] Processing App\Jobs\AgentUserLoginJob. [] []
-[2022-05-03 19:37:01] queue.ERROR: [2022-05-03 19:37:01] Failed App\Jobs\InitSysMessageJob. [] []
-[2022-05-03 19:37:01] queue.ERROR: Hyperf\Database\Exception\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'wp_dy.sys_message' doesn't exist (SQL: select * from `sys_message` where date(`expired_at`) >= 2022-05-03 19:22:01 order by `created_at` asc limit 5)(42S02) in /var/www/chuji_server/vendor/hyperf/database/src/Connection.php:1082
-Stack trace:
-#0 /var/www/chuji_server/vendor/hyperf/database/src/Connection.php(1039): Hyperf\Database\Connection->runQueryCallback()
-#1 /var/www/chuji_server/vendor/hyperf/database/src/Connection.php(289): Hyperf\Database\Connection->run()
-#2 /var/www/chuji_server/vendor/hyperf/db-connection/src/Connection.php(68): Hyperf\Database\Connection->select()
-#3 /var/www/chuji_server/vendor/hyperf/db-connection/src/Traits/DbConnection.php(41): Hyperf\DbConnection\Connection->__call()
-#4 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(2736): Hyperf\DbConnection\Connection->select()
-#5 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(1878): Hyperf\Database\Query\Builder->runSelect()
-#6 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(2901): Hyperf\Database\Query\Builder->Hyperf\Database\Query\{closure}()
-#7 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(1879): Hyperf\Database\Query\Builder->onceWithColumns()
-#8 /var/www/chuji_server/vendor/hyperf/database/src/Model/Builder.php(591): Hyperf\Database\Query\Builder->get()
-#9 /var/www/chuji_server/vendor/hyperf/database/src/Model/Builder.php(575): Hyperf\Database\Model\Builder->getModels()
-#10 /var/www/chuji_server/app/Repositories/SysMessageRepository.php(40): Hyperf\Database\Model\Builder->get()
-#11 /var/www/chuji_server/private_vendor/kz2/cacheplus/src/Factories/CacheFactory.php(35): App\Repositories\SysMessageRepository->App\Repositories\{closure}()
-#12 /var/www/chuji_server/app/Repositories/SysMessageRepository.php(46): KZ2\Hyperf\CachePlus\Factories\CacheFactory->remember()
-#13 /var/www/chuji_server/app/Repositories/SysMessageRepository.php(59): App\Repositories\SysMessageRepository->getTopLists()
-#14 /var/www/chuji_server/app/Jobs/InitSysMessageJob.php(24): App\Repositories\SysMessageRepository->initForUser()
-#15 /var/www/chuji_server/vendor/hyperf/async-queue/src/Driver/Driver.php(130): App\Jobs\InitSysMessageJob->handle()
-#16 /var/www/chuji_server/vendor/hyperf/utils/src/Coroutine/Concurrent.php(75): Hyperf\AsyncQueue\Driver\Driver->Hyperf\AsyncQueue\Driver\{closure}()
-#17 /var/www/chuji_server/vendor/hyperf/utils/src/Functions.php(274): Hyperf\Utils\Coroutine\Concurrent->Hyperf\Utils\Coroutine\{closure}()
-#18 /var/www/chuji_server/vendor/hyperf/utils/src/Coroutine.php(62): call()
-#19 {main} [] []
-[2022-05-03 19:37:01] queue.INFO: [2022-05-03 19:37:01] Processed App\Jobs\SentTaskRewardJob. [] []
-[2022-05-03 19:37:01] queue.INFO: [2022-05-03 19:37:01] Processed App\Jobs\AddHyperLogLogJob. [] []
-[2022-05-03 19:37:02] queue.INFO: [2022-05-03 19:37:02] Processed App\Jobs\AgentUserLoginJob. [] []
-[2022-05-03 19:37:35] queue.INFO: [2022-05-03 19:37:35] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-05-03 19:37:35] log.INFO: {"retCode":"9999","retMsg":"请设置一级代理商费率"}请设置一级代理商费率 [] []
-[2022-05-03 19:37:35] log.ERROR: 亲,换个支付方式试试呢?[258] in /var/www/chuji_server/app/Repositories/Service/PaymentService.php [] []
-[2022-05-03 19:37:35] log.ERROR: #0 /var/www/chuji_server/runtime/container/proxy/Modules_Api_Controllers_VipController.proxy.php(64): App\Repositories\Service\PaymentService->createPayLink()
-#1 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(161): Modules\Api\Controllers\VipController->buyvip()
-#2 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(113): Hyperf\HttpServer\CoreMiddleware->handleFound()
-#3 /var/www/chuji_server/app/Middlewares/AppCoreMiddleware.php(41): Hyperf\HttpServer\CoreMiddleware->process()
-#4 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): App\Middlewares\AppCoreMiddleware->process()
-#5 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#6 /var/www/chuji_server/Modules/Api/Middlewares/ApiAuthMiddleware.php(99): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#7 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): Modules\Api\Middlewares\ApiAuthMiddleware->process()
-#8 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#9 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpDispatcher.php(40): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#10 /var/www/chuji_server/vendor/hyperf/http-server/src/Server.php(117): Hyperf\Dispatcher\HttpDispatcher->dispatch()
-#11 {main} [] []
-[2022-05-03 19:37:36] queue.INFO: [2022-05-03 19:37:36] Processed App\Jobs\AgentOrderIncJob. [] []
-[2022-05-03 19:40:47] queue.INFO: [2022-05-03 19:40:47] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-05-03 19:40:48] queue.INFO: [2022-05-03 19:40:48] Processed App\Jobs\AgentOrderIncJob. [] []
-[2022-05-03 19:40:50] log.ERROR: 亲,换个支付方式试试呢?[258] in /var/www/chuji_server/app/Repositories/Service/PaymentService.php [] []
-[2022-05-03 19:40:50] log.ERROR: #0 /var/www/chuji_server/runtime/container/proxy/Modules_Api_Controllers_VipController.proxy.php(64): App\Repositories\Service\PaymentService->createPayLink()
-#1 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(161): Modules\Api\Controllers\VipController->buyvip()
-#2 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(113): Hyperf\HttpServer\CoreMiddleware->handleFound()
-#3 /var/www/chuji_server/app/Middlewares/AppCoreMiddleware.php(41): Hyperf\HttpServer\CoreMiddleware->process()
-#4 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): App\Middlewares\AppCoreMiddleware->process()
-#5 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#6 /var/www/chuji_server/Modules/Api/Middlewares/ApiAuthMiddleware.php(99): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#7 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): Modules\Api\Middlewares\ApiAuthMiddleware->process()
-#8 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#9 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpDispatcher.php(40): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#10 /var/www/chuji_server/vendor/hyperf/http-server/src/Server.php(117): Hyperf\Dispatcher\HttpDispatcher->dispatch()
-#11 {main} [] []
-[2022-05-03 19:41:35] queue.INFO: [2022-05-03 19:41:35] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-05-03 19:41:36] queue.INFO: [2022-05-03 19:41:36] Processed App\Jobs\AgentOrderIncJob. [] []
-[2022-05-03 19:41:37] log.ERROR: 亲,换个支付方式试试呢?[258] in /var/www/chuji_server/app/Repositories/Service/PaymentService.php [] []
-[2022-05-03 19:41:37] log.ERROR: #0 /var/www/chuji_server/runtime/container/proxy/Modules_Api_Controllers_VipController.proxy.php(64): App\Repositories\Service\PaymentService->createPayLink()
-#1 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(161): Modules\Api\Controllers\VipController->buyvip()
-#2 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(113): Hyperf\HttpServer\CoreMiddleware->handleFound()
-#3 /var/www/chuji_server/app/Middlewares/AppCoreMiddleware.php(41): Hyperf\HttpServer\CoreMiddleware->process()
-#4 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): App\Middlewares\AppCoreMiddleware->process()
-#5 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#6 /var/www/chuji_server/Modules/Api/Middlewares/ApiAuthMiddleware.php(99): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#7 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): Modules\Api\Middlewares\ApiAuthMiddleware->process()
-#8 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#9 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpDispatcher.php(40): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#10 /var/www/chuji_server/vendor/hyperf/http-server/src/Server.php(117): Hyperf\Dispatcher\HttpDispatcher->dispatch()
-#11 {main} [] []
-[2022-05-03 19:41:55] queue.INFO: [2022-05-03 19:41:55] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-05-03 19:41:56] queue.INFO: [2022-05-03 19:41:56] Processed App\Jobs\AgentOrderIncJob. [] []
-[2022-05-03 19:41:58] log.ERROR: 亲,换个支付方式试试呢?[258] in /var/www/chuji_server/app/Repositories/Service/PaymentService.php [] []
-[2022-05-03 19:41:58] log.ERROR: #0 /var/www/chuji_server/runtime/container/proxy/Modules_Api_Controllers_VipController.proxy.php(64): App\Repositories\Service\PaymentService->createPayLink()
-#1 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(161): Modules\Api\Controllers\VipController->buyvip()
-#2 /var/www/chuji_server/vendor/hyperf/http-server/src/CoreMiddleware.php(113): Hyperf\HttpServer\CoreMiddleware->handleFound()
-#3 /var/www/chuji_server/app/Middlewares/AppCoreMiddleware.php(41): Hyperf\HttpServer\CoreMiddleware->process()
-#4 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): App\Middlewares\AppCoreMiddleware->process()
-#5 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#6 /var/www/chuji_server/Modules/Api/Middlewares/ApiAuthMiddleware.php(99): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#7 /var/www/chuji_server/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): Modules\Api\Middlewares\ApiAuthMiddleware->process()
-#8 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest()
-#9 /var/www/chuji_server/vendor/hyperf/dispatcher/src/HttpDispatcher.php(40): Hyperf\Dispatcher\HttpRequestHandler->handle()
-#10 /var/www/chuji_server/vendor/hyperf/http-server/src/Server.php(117): Hyperf\Dispatcher\HttpDispatcher->dispatch()
-#11 {main} [] []
-[2022-05-03 19:42:35] queue.INFO: [2022-05-03 19:42:35] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-05-03 19:42:36] queue.INFO: [2022-05-03 19:42:36] Processed App\Jobs\AgentOrderIncJob. [] []
-[2022-05-03 19:57:32] log.INFO: {"busId":"10087","orderNo":"DK202205020331023698","orderAmount":"30.00","sign":"4CB76CB658DC369EF29E2F214B86B048","notifyUrl":"http:\/\/dk-server.test.wg8.site\/notify\/1\/2503\/Wh","channelProductId":"1007","callbackUrl":"http:\/\/dk-server.test.wg8.site","income":"3000","payOrderId":"P01202205031948231365991","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205031948236181","paySuccTime":"","channelOrderNo":"","backType":"2","reqTime":"20220503194924","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2"}发送回调信息! [] []
-[2022-05-03 19:57:32] queue.INFO: [2022-05-03 19:57:32] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 19:57:32] queue.INFO: [2022-05-03 19:57:32] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-03 19:57:32] queue.INFO: [2022-05-03 19:57:32] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 19:57:33] queue.INFO: [2022-05-03 19:57:33] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-03 19:57:40] queue.INFO: [2022-05-03 19:57:40] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 19:57:40] log.INFO: {"income":"3000","payOrderId":"P01202205031948231365991","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205031948236181","paySuccTime":"","sign":"4CB76CB658DC369EF29E2F214B86B048","channelOrderNo":"","backType":"2","reqTime":"20220503194924","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2"}发送回调信息! [] []
-[2022-05-03 19:57:40] queue.INFO: [2022-05-03 19:57:40] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-03 19:57:40] queue.INFO: [2022-05-03 19:57:40] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 19:57:41] queue.INFO: [2022-05-03 19:57:41] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-03 19:58:03] log.INFO: {"income":"3000","payOrderId":"P01202205031948231365991","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205031948236181","paySuccTime":"","sign":"4CB76CB658DC369EF29E2F214B86B048","channelOrderNo":"","backType":"2","reqTime":"20220503194924","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2"}发送回调信息! [] []
-[2022-05-03 19:58:03] queue.INFO: [2022-05-03 19:58:03] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 19:58:03] queue.INFO: [2022-05-03 19:58:03] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-03 19:58:03] queue.INFO: [2022-05-03 19:58:03] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 19:58:04] queue.INFO: [2022-05-03 19:58:04] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-03 20:04:34] log.INFO: {"income":"3000","payOrderId":"P01202205031948231365991","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205031948236181","paySuccTime":"","sign":"4CB76CB658DC369EF29E2F214B86B048","channelOrderNo":"","backType":"2","reqTime":"20220503194924","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2"}发送回调信息! [] []
-[2022-05-03 20:04:34] queue.INFO: [2022-05-03 20:04:34] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 20:04:34] queue.INFO: [2022-05-03 20:04:34] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 20:04:34] queue.INFO: [2022-05-03 20:04:34] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-05-03 20:04:36] queue.INFO: [2022-05-03 20:04:36] Processed App\Jobs\AgentOrderIncJob. [] []
-[2022-05-03 20:04:36] queue.INFO: [2022-05-03 20:04:36] Processing App\Jobs\RebateUserJob. [] []
-[2022-05-03 20:04:36] queue.INFO: [2022-05-03 20:04:36] Processed App\Jobs\RebateUserJob. [] []
-[2022-05-03 20:21:11] log.INFO: {"income":"3000","payOrderId":"P01202205032015020116299","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205032015017579","paySuccTime":"","sign":"46D172C783098BCE1BBF6BA42CAD64F9","channelOrderNo":"","backType":"2","reqTime":"20220503201722","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2
-"}发送回调信息! [] []
-[2022-05-03 20:21:11] queue.INFO: [2022-05-03 20:21:11] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 20:21:12] queue.INFO: [2022-05-03 20:21:12] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-03 20:21:12] queue.INFO: [2022-05-03 20:21:12] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 20:21:13] queue.INFO: [2022-05-03 20:21:13] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-03 20:21:35] log.INFO: {"income":"3000","payOrderId":"P01202205032015020116299","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205032015017579","paySuccTime":"","sign":"46D172C783098BCE1BBF6BA42CAD64F9","channelOrderNo":"","backType":"2","reqTime":"20220503201722","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2
-"}发送回调信息! [] []
-[2022-05-03 20:21:35] queue.INFO: [2022-05-03 20:21:35] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 20:21:35] queue.INFO: [2022-05-03 20:21:35] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-03 20:21:35] queue.INFO: [2022-05-03 20:21:35] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 20:21:36] queue.INFO: [2022-05-03 20:21:36] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-03 20:23:08] log.INFO: {"income":"3000","payOrderId":"P01202205032015020116299","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205032015017579","paySuccTime":"","sign":"46D172C783098BCE1BBF6BA42CAD64F9","channelOrderNo":"","backType":"2","reqTime":"20220503201722","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2
-"}发送回调信息! [] []
-[2022-05-03 20:23:08] queue.INFO: [2022-05-03 20:23:08] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 20:23:08] queue.INFO: [2022-05-03 20:23:08] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-03 20:23:08] queue.INFO: [2022-05-03 20:23:08] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 20:23:09] queue.INFO: [2022-05-03 20:23:09] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-03 20:23:59] log.INFO: {"income":"3000","payOrderId":"P01202205032015020116299","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205032015017579","paySuccTime":"","sign":"46D172C783098BCE1BBF6BA42CAD64F9","channelOrderNo":"","backType":"2","reqTime":"20220503201722","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2
-"}发送回调信息! [] []
-[2022-05-03 20:23:59] queue.INFO: [2022-05-03 20:23:59] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 20:23:59] queue.INFO: [2022-05-03 20:23:59] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-03 20:23:59] queue.INFO: [2022-05-03 20:23:59] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 20:24:00] queue.INFO: [2022-05-03 20:24:00] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-03 20:26:38] queue.INFO: [2022-05-03 20:26:38] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 20:26:38] log.INFO: {"income":"3000","payOrderId":"P01202205032015020116299","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205032015017579","paySuccTime":"","sign":"46D172C783098BCE1BBF6BA42CAD64F9","channelOrderNo":"","backType":"2","reqTime":"20220503201722","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2
-"}发送回调信息! [] []
-[2022-05-03 20:26:38] queue.INFO: [2022-05-03 20:26:38] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-03 20:26:38] queue.INFO: [2022-05-03 20:26:38] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 20:26:38] queue.INFO: [2022-05-03 20:26:38] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-03 21:08:23] queue.INFO: [2022-05-03 21:08:23] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:08:23] log.INFO: {"income":"3000","payOrderId":"P01202205032015020116299","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205032015017579","paySuccTime":"","sign":"46D172C783098BCE1BBF6BA42CAD64F9","channelOrderNo":"","backType":"2","reqTime":"20220503201722","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2
-"}发送回调信息! [] []
-[2022-05-03 21:08:23] queue.INFO: [2022-05-03 21:08:23] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-03 21:08:23] queue.INFO: [2022-05-03 21:08:23] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:08:24] queue.INFO: [2022-05-03 21:08:24] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-03 21:09:03] log.INFO: {"income":"3000","payOrderId":"P01202205032015020116299","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205032015017579","paySuccTime":"","sign":"46D172C783098BCE1BBF6BA42CAD64F9","channelOrderNo":"","backType":"2","reqTime":"20220503201722","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2
-"}发送回调信息! [] []
-[2022-05-03 21:09:03] queue.INFO: [2022-05-03 21:09:03] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:09:03] queue.INFO: [2022-05-03 21:09:03] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:09:14] log.INFO: {"income":"3000","payOrderId":"P01202205032015020116299","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205032015017579","paySuccTime":"","sign":"46D172C783098BCE1BBF6BA42CAD64F9","channelOrderNo":"","backType":"2","reqTime":"20220503201722","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2
-"}发送回调信息! [] []
-[2022-05-03 21:09:15] queue.INFO: [2022-05-03 21:09:15] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:09:15] queue.INFO: [2022-05-03 21:09:15] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-03 21:09:15] queue.INFO: [2022-05-03 21:09:15] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:10:55] log.INFO: {"income":"3000","payOrderId":"P01202205032015020116299","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205032015017579","paySuccTime":"","sign":"46D172C783098BCE1BBF6BA42CAD64F9","channelOrderNo":"","backType":"2","reqTime":"20220503201722","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2
-"}发送回调信息! [] []
-[2022-05-03 21:10:55] queue.INFO: [2022-05-03 21:10:55] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:10:55] queue.INFO: [2022-05-03 21:10:55] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-03 21:10:55] queue.INFO: [2022-05-03 21:10:55] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:10:56] queue.INFO: [2022-05-03 21:10:56] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-03 21:11:56] log.INFO: {"income":"3000","payOrderId":"P01202205032015020116299","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205032015017579","paySuccTime":"","sign":"46D172C783098BCE1BBF6BA42CAD64F9","channelOrderNo":"","backType":"2","reqTime":"20220503201722","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2
-"}发送回调信息! [] []
-[2022-05-03 21:11:56] queue.INFO: [2022-05-03 21:11:56] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:11:56] queue.INFO: [2022-05-03 21:11:56] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-03 21:11:56] queue.INFO: [2022-05-03 21:11:56] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:11:57] queue.INFO: [2022-05-03 21:11:57] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-03 21:13:10] log.INFO: {"income":"3000","payOrderId":"P01202205032015020116299","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205032015017579","paySuccTime":"","sign":"46D172C783098BCE1BBF6BA42CAD64F9","channelOrderNo":"","backType":"2","reqTime":"20220503201722","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2
-"}发送回调信息! [] []
-[2022-05-03 21:13:10] queue.INFO: [2022-05-03 21:13:10] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:13:10] queue.INFO: [2022-05-03 21:13:10] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-03 21:13:10] queue.INFO: [2022-05-03 21:13:10] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:13:10] queue.INFO: [2022-05-03 21:13:10] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-03 21:14:02] log.INFO: {"income":"3000","payOrderId":"P01202205032015020116299","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205032015017579","paySuccTime":"","sign":"46D172C783098BCE1BBF6BA42CAD64F9","channelOrderNo":"","backType":"2","reqTime":"20220503201722","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2
-"}发送回调信息! [] []
-[2022-05-03 21:14:02] queue.INFO: [2022-05-03 21:14:02] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:14:02] queue.INFO: [2022-05-03 21:14:02] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-03 21:14:02] queue.INFO: [2022-05-03 21:14:02] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:14:03] queue.INFO: [2022-05-03 21:14:03] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-03 21:15:26] log.INFO: {"income":"3000","payOrderId":"P01202205032015020116299","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205032015017579","paySuccTime":"","sign":"46D172C783098BCE1BBF6BA42CAD64F9","channelOrderNo":"","backType":"2","reqTime":"20220503201722","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2
-"}发送回调信息! [] []
-[2022-05-03 21:15:26] queue.INFO: [2022-05-03 21:15:26] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:15:26] queue.INFO: [2022-05-03 21:15:26] Processing App\Jobs\SendTgMegJob. [] []
-[2022-05-03 21:15:26] queue.INFO: [2022-05-03 21:15:26] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:15:27] queue.INFO: [2022-05-03 21:15:27] Processed App\Jobs\SendTgMegJob. [] []
-[2022-05-03 21:17:06] log.INFO: {"income":"3000","payOrderId":"P01202205032015020116299","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205032015017579","paySuccTime":"","sign":"46D172C783098BCE1BBF6BA42CAD64F9","channelOrderNo":"","backType":"2","reqTime":"20220503201722","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2
-"}发送回调信息! [] []
-[2022-05-03 21:17:06] queue.INFO: [2022-05-03 21:17:06] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:17:06] log.INFO: {"income":"3000","payOrderId":"P01202205032015020116299","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205032015017579","paySuccTime":"","sign":"46D172C783098BCE1BBF6BA42CAD64F9","channelOrderNo":"","backType":"2","reqTime":"20220503201722","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2
-"}:验证失败! [] []
-[2022-05-03 21:17:06] queue.INFO: [2022-05-03 21:17:06] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:19:07] queue.INFO: [2022-05-03 21:19:07] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:19:07] log.INFO: {"income":"3000","payOrderId":"P01202205032015020116299","amount":"3000","mchId":"20000035","productId":"8034","mchOrderNo":"DK202205032015017579","paySuccTime":"","sign":"46D172C783098BCE1BBF6BA42CAD64F9","channelOrderNo":"","backType":"2","reqTime":"20220503201722","param1":"","param2":"","appId":"889a781ef3ed4135be7257d458572c51","status":"2"}发送回调信息! [] []
-[2022-05-03 21:19:08] queue.INFO: [2022-05-03 21:19:08] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-05-03 21:19:08] queue.INFO: [2022-05-03 21:19:08] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-05-03 21:19:09] queue.INFO: [2022-05-03 21:19:09] Processed App\Jobs\AgentOrderIncJob. [] []
-[2022-05-03 21:19:09] queue.INFO: [2022-05-03 21:19:09] Processing App\Jobs\RebateUserJob. [] []
-[2022-05-03 21:19:10] queue.INFO: [2022-05-03 21:19:10] Processed App\Jobs\RebateUserJob. [] []

+ 0 - 38
runtime/logs/hyperf-2022-05-12.log

@@ -1,38 +0,0 @@
-[2022-05-12 06:01:03] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-05-12 12:01:03] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-05-12 14:01:03] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-05-12 16:01:03] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-05-12 18:01:03] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-05-12 20:01:02] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-05-12 22:10:48] queue.INFO: [2022-05-12 22:10:48] Processing App\Jobs\AddHyperLogLogJob. [] []
-[2022-05-12 22:10:48] queue.INFO: [2022-05-12 22:10:48] Processing App\Jobs\SentTaskRewardJob. [] []
-[2022-05-12 22:10:49] queue.INFO: [2022-05-12 22:10:49] Processing App\Jobs\AgentUserLoginJob. [] []
-[2022-05-12 22:10:49] queue.INFO: [2022-05-12 22:10:49] Processing App\Jobs\RefreshLoginTimeJob. [] []
-[2022-05-12 22:10:50] queue.INFO: [2022-05-12 22:10:50] Processed App\Jobs\RefreshLoginTimeJob. [] []
-[2022-05-12 22:10:50] queue.INFO: [2022-05-12 22:10:50] Processing App\Jobs\InitSysMessageJob. [] []
-[2022-05-12 22:10:50] queue.INFO: [2022-05-12 22:10:50] Processed App\Jobs\SentTaskRewardJob. [] []
-[2022-05-12 22:10:50] queue.ERROR: [2022-05-12 22:10:50] Failed App\Jobs\InitSysMessageJob. [] []
-[2022-05-12 22:10:50] queue.ERROR: Hyperf\Database\Exception\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'wp_dy.sys_message' doesn't exist (SQL: select * from `sys_message` where date(`expired_at`) >= 2022-05-12 21:55:50 order by `created_at` asc limit 5)(42S02) in /var/www/chuji_server/vendor/hyperf/database/src/Connection.php:1082
-Stack trace:
-#0 /var/www/chuji_server/vendor/hyperf/database/src/Connection.php(1039): Hyperf\Database\Connection->runQueryCallback()
-#1 /var/www/chuji_server/vendor/hyperf/database/src/Connection.php(289): Hyperf\Database\Connection->run()
-#2 /var/www/chuji_server/vendor/hyperf/db-connection/src/Connection.php(68): Hyperf\Database\Connection->select()
-#3 /var/www/chuji_server/vendor/hyperf/db-connection/src/Traits/DbConnection.php(41): Hyperf\DbConnection\Connection->__call()
-#4 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(2736): Hyperf\DbConnection\Connection->select()
-#5 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(1878): Hyperf\Database\Query\Builder->runSelect()
-#6 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(2901): Hyperf\Database\Query\Builder->Hyperf\Database\Query\{closure}()
-#7 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(1879): Hyperf\Database\Query\Builder->onceWithColumns()
-#8 /var/www/chuji_server/vendor/hyperf/database/src/Model/Builder.php(591): Hyperf\Database\Query\Builder->get()
-#9 /var/www/chuji_server/vendor/hyperf/database/src/Model/Builder.php(575): Hyperf\Database\Model\Builder->getModels()
-#10 /var/www/chuji_server/app/Repositories/SysMessageRepository.php(40): Hyperf\Database\Model\Builder->get()
-#11 /var/www/chuji_server/private_vendor/kz2/cacheplus/src/Factories/CacheFactory.php(35): App\Repositories\SysMessageRepository->App\Repositories\{closure}()
-#12 /var/www/chuji_server/app/Repositories/SysMessageRepository.php(46): KZ2\Hyperf\CachePlus\Factories\CacheFactory->remember()
-#13 /var/www/chuji_server/app/Repositories/SysMessageRepository.php(59): App\Repositories\SysMessageRepository->getTopLists()
-#14 /var/www/chuji_server/app/Jobs/InitSysMessageJob.php(24): App\Repositories\SysMessageRepository->initForUser()
-#15 /var/www/chuji_server/vendor/hyperf/async-queue/src/Driver/Driver.php(130): App\Jobs\InitSysMessageJob->handle()
-#16 /var/www/chuji_server/vendor/hyperf/utils/src/Coroutine/Concurrent.php(75): Hyperf\AsyncQueue\Driver\Driver->Hyperf\AsyncQueue\Driver\{closure}()
-#17 /var/www/chuji_server/vendor/hyperf/utils/src/Functions.php(274): Hyperf\Utils\Coroutine\Concurrent->Hyperf\Utils\Coroutine\{closure}()
-#18 /var/www/chuji_server/vendor/hyperf/utils/src/Coroutine.php(62): call()
-#19 {main} [] []
-[2022-05-12 22:10:51] queue.INFO: [2022-05-12 22:10:51] Processed App\Jobs\AddHyperLogLogJob. [] []
-[2022-05-12 22:10:51] queue.INFO: [2022-05-12 22:10:51] Processed App\Jobs\AgentUserLoginJob. [] []

+ 0 - 37
runtime/logs/hyperf-2022-05-27.log

@@ -1,37 +0,0 @@
-[2022-05-27 14:55:50] queue.INFO: [2022-05-27 14:55:50] Processing App\Jobs\RefreshLoginTimeJob. [] []
-[2022-05-27 14:55:50] queue.INFO: [2022-05-27 14:55:50] Processed App\Jobs\RefreshLoginTimeJob. [] []
-[2022-05-27 14:55:50] queue.INFO: [2022-05-27 14:55:50] Processing App\Jobs\InitSysMessageJob. [] []
-[2022-05-27 14:55:50] queue.ERROR: [2022-05-27 14:55:50] Failed App\Jobs\InitSysMessageJob. [] []
-[2022-05-27 14:55:50] queue.ERROR: Hyperf\Database\Exception\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'wp_dy.sys_message' doesn't exist (SQL: select * from `sys_message` where date(`expired_at`) >= 2022-05-27 14:40:50 order by `created_at` asc limit 5)(42S02) in /var/www/chuji_server/vendor/hyperf/database/src/Connection.php:1082
-Stack trace:
-#0 /var/www/chuji_server/vendor/hyperf/database/src/Connection.php(1039): Hyperf\Database\Connection->runQueryCallback()
-#1 /var/www/chuji_server/vendor/hyperf/database/src/Connection.php(289): Hyperf\Database\Connection->run()
-#2 /var/www/chuji_server/vendor/hyperf/db-connection/src/Connection.php(68): Hyperf\Database\Connection->select()
-#3 /var/www/chuji_server/vendor/hyperf/db-connection/src/Traits/DbConnection.php(41): Hyperf\DbConnection\Connection->__call()
-#4 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(2736): Hyperf\DbConnection\Connection->select()
-#5 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(1878): Hyperf\Database\Query\Builder->runSelect()
-#6 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(2901): Hyperf\Database\Query\Builder->Hyperf\Database\Query\{closure}()
-#7 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(1879): Hyperf\Database\Query\Builder->onceWithColumns()
-#8 /var/www/chuji_server/vendor/hyperf/database/src/Model/Builder.php(591): Hyperf\Database\Query\Builder->get()
-#9 /var/www/chuji_server/vendor/hyperf/database/src/Model/Builder.php(575): Hyperf\Database\Model\Builder->getModels()
-#10 /var/www/chuji_server/app/Repositories/SysMessageRepository.php(40): Hyperf\Database\Model\Builder->get()
-#11 /var/www/chuji_server/private_vendor/kz2/cacheplus/src/Factories/CacheFactory.php(35): App\Repositories\SysMessageRepository->App\Repositories\{closure}()
-#12 /var/www/chuji_server/app/Repositories/SysMessageRepository.php(46): KZ2\Hyperf\CachePlus\Factories\CacheFactory->remember()
-#13 /var/www/chuji_server/app/Repositories/SysMessageRepository.php(59): App\Repositories\SysMessageRepository->getTopLists()
-#14 /var/www/chuji_server/app/Jobs/InitSysMessageJob.php(24): App\Repositories\SysMessageRepository->initForUser()
-#15 /var/www/chuji_server/vendor/hyperf/async-queue/src/Driver/Driver.php(130): App\Jobs\InitSysMessageJob->handle()
-#16 /var/www/chuji_server/vendor/hyperf/utils/src/Coroutine/Concurrent.php(75): Hyperf\AsyncQueue\Driver\Driver->Hyperf\AsyncQueue\Driver\{closure}()
-#17 /var/www/chuji_server/vendor/hyperf/utils/src/Functions.php(274): Hyperf\Utils\Coroutine\Concurrent->Hyperf\Utils\Coroutine\{closure}()
-#18 /var/www/chuji_server/vendor/hyperf/utils/src/Coroutine.php(62): call()
-#19 {main} [] []
-[2022-05-27 14:55:51] queue.INFO: [2022-05-27 14:55:51] Processing App\Jobs\AddHyperLogLogJob. [] []
-[2022-05-27 14:55:51] queue.INFO: [2022-05-27 14:55:51] Processing App\Jobs\SentTaskRewardJob. [] []
-[2022-05-27 14:55:51] queue.INFO: [2022-05-27 14:55:51] Processed App\Jobs\SentTaskRewardJob. [] []
-[2022-05-27 14:55:52] queue.INFO: [2022-05-27 14:55:52] Processing App\Jobs\AgentUserLoginJob. [] []
-[2022-05-27 14:55:52] queue.INFO: [2022-05-27 14:55:52] Processed App\Jobs\AddHyperLogLogJob. [] []
-[2022-05-27 14:55:53] queue.INFO: [2022-05-27 14:55:53] Processed App\Jobs\AgentUserLoginJob. [] []
-[2022-05-27 14:57:10] queue.INFO: [2022-05-27 14:57:10] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-05-27 14:57:10] queue.INFO: [2022-05-27 14:57:10] Processed App\Jobs\AgentOrderIncJob. [] []
-[2022-05-27 15:01:01] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-05-27 18:01:04] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-05-27 21:01:02] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []

+ 0 - 2
runtime/logs/hyperf-2022-05-28.log

@@ -1,2 +0,0 @@
-[2022-05-28 00:01:03] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-05-28 00:06:00] log.INFO: CreatorVideoDayInitCommand:完成每日清零创作者视频量 [] []

+ 0 - 4
runtime/logs/hyperf-2022-05-29.log

@@ -1,4 +0,0 @@
-[2022-05-29 00:01:02] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-05-29 00:06:00] log.INFO: CreatorVideoDayInitCommand:完成每日清零创作者视频量 [] []
-[2022-05-29 03:01:02] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-05-29 06:01:02] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []

+ 0 - 33
runtime/logs/hyperf-2022-06-02.log

@@ -1,33 +0,0 @@
-[2022-06-02 17:04:57] queue.INFO: [2022-06-02 17:04:57] Processing App\Jobs\AddHyperLogLogJob. [] []
-[2022-06-02 17:04:57] queue.INFO: [2022-06-02 17:04:57] Processing App\Jobs\RefreshLoginTimeJob. [] []
-[2022-06-02 17:04:57] queue.INFO: [2022-06-02 17:04:57] Processing App\Jobs\SentTaskRewardJob. [] []
-[2022-06-02 17:04:57] queue.INFO: [2022-06-02 17:04:57] Processing App\Jobs\AgentUserLoginJob. [] []
-[2022-06-02 17:04:57] queue.INFO: [2022-06-02 17:04:57] Processed App\Jobs\RefreshLoginTimeJob. [] []
-[2022-06-02 17:04:58] queue.INFO: [2022-06-02 17:04:58] Processing App\Jobs\InitSysMessageJob. [] []
-[2022-06-02 17:04:58] queue.INFO: [2022-06-02 17:04:58] Processed App\Jobs\AddHyperLogLogJob. [] []
-[2022-06-02 17:04:58] queue.INFO: [2022-06-02 17:04:58] Processed App\Jobs\SentTaskRewardJob. [] []
-[2022-06-02 17:04:58] queue.ERROR: [2022-06-02 17:04:58] Failed App\Jobs\InitSysMessageJob. [] []
-[2022-06-02 17:04:58] queue.ERROR: Hyperf\Database\Exception\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'wp_dy.sys_message' doesn't exist (SQL: select * from `sys_message` where date(`expired_at`) >= 2022-06-02 16:49:58 order by `created_at` asc limit 5)(42S02) in /var/www/chuji_server/vendor/hyperf/database/src/Connection.php:1082
-Stack trace:
-#0 /var/www/chuji_server/vendor/hyperf/database/src/Connection.php(1039): Hyperf\Database\Connection->runQueryCallback()
-#1 /var/www/chuji_server/vendor/hyperf/database/src/Connection.php(289): Hyperf\Database\Connection->run()
-#2 /var/www/chuji_server/vendor/hyperf/db-connection/src/Connection.php(68): Hyperf\Database\Connection->select()
-#3 /var/www/chuji_server/vendor/hyperf/db-connection/src/Traits/DbConnection.php(41): Hyperf\DbConnection\Connection->__call()
-#4 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(2736): Hyperf\DbConnection\Connection->select()
-#5 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(1878): Hyperf\Database\Query\Builder->runSelect()
-#6 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(2901): Hyperf\Database\Query\Builder->Hyperf\Database\Query\{closure}()
-#7 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(1879): Hyperf\Database\Query\Builder->onceWithColumns()
-#8 /var/www/chuji_server/vendor/hyperf/database/src/Model/Builder.php(591): Hyperf\Database\Query\Builder->get()
-#9 /var/www/chuji_server/vendor/hyperf/database/src/Model/Builder.php(575): Hyperf\Database\Model\Builder->getModels()
-#10 /var/www/chuji_server/app/Repositories/SysMessageRepository.php(40): Hyperf\Database\Model\Builder->get()
-#11 /var/www/chuji_server/private_vendor/kz2/cacheplus/src/Factories/CacheFactory.php(35): App\Repositories\SysMessageRepository->App\Repositories\{closure}()
-#12 /var/www/chuji_server/app/Repositories/SysMessageRepository.php(46): KZ2\Hyperf\CachePlus\Factories\CacheFactory->remember()
-#13 /var/www/chuji_server/app/Repositories/SysMessageRepository.php(59): App\Repositories\SysMessageRepository->getTopLists()
-#14 /var/www/chuji_server/app/Jobs/InitSysMessageJob.php(24): App\Repositories\SysMessageRepository->initForUser()
-#15 /var/www/chuji_server/vendor/hyperf/async-queue/src/Driver/Driver.php(130): App\Jobs\InitSysMessageJob->handle()
-#16 /var/www/chuji_server/vendor/hyperf/utils/src/Coroutine/Concurrent.php(75): Hyperf\AsyncQueue\Driver\Driver->Hyperf\AsyncQueue\Driver\{closure}()
-#17 /var/www/chuji_server/vendor/hyperf/utils/src/Functions.php(274): Hyperf\Utils\Coroutine\Concurrent->Hyperf\Utils\Coroutine\{closure}()
-#18 /var/www/chuji_server/vendor/hyperf/utils/src/Coroutine.php(62): call()
-#19 {main} [] []
-[2022-06-02 17:04:58] queue.INFO: [2022-06-02 17:04:58] Processed App\Jobs\AgentUserLoginJob. [] []
-[2022-06-02 18:01:02] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []

+ 0 - 191
runtime/logs/hyperf-2022-06-03.log

@@ -1,191 +0,0 @@
-[2022-06-03 01:24:52] queue.INFO: [2022-06-03 01:24:52] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-06-03 01:24:53] queue.INFO: [2022-06-03 01:24:53] Processed App\Jobs\AgentOrderIncJob. [] []
-[2022-06-03 01:39:51] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\\\/6\\\/3 1:32:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"CAE76B511A721B000A77FC7A8E6EF12A"}发送回调信息! [] []
-[2022-06-03 01:39:52] queue.INFO: [2022-06-03 01:39:52] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:39:52] queue.INFO: [2022-06-03 01:39:52] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:39:52] queue.INFO: [2022-06-03 01:39:52] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:39:52] queue.INFO: [2022-06-03 01:39:52] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:40:08] queue.INFO: [2022-06-03 01:40:08] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:40:08] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\\\/6\\\/3 1:32:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"CAE76B511A721B000A77FC7A8E6EF12A"}发送回调信息! [] []
-[2022-06-03 01:40:08] queue.INFO: [2022-06-03 01:40:08] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:40:08] queue.INFO: [2022-06-03 01:40:08] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:40:08] queue.INFO: [2022-06-03 01:40:08] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:40:29] queue.INFO: [2022-06-03 01:40:29] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:40:29] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\\\/6\\\/3 1:32:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"CAE76B511A721B000A77FC7A8E6EF12A"}发送回调信息! [] []
-[2022-06-03 01:40:29] queue.INFO: [2022-06-03 01:40:29] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:40:29] queue.INFO: [2022-06-03 01:40:29] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:40:34] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\\\/6\\\/3 1:32:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"CAE76B511A721B000A77FC7A8E6EF12A"}发送回调信息! [] []
-[2022-06-03 01:40:34] queue.INFO: [2022-06-03 01:40:34] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:40:34] queue.INFO: [2022-06-03 01:40:34] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:40:34] queue.INFO: [2022-06-03 01:40:34] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:45:26] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\\\/6\\\/3 1:32:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"CAE76B511A721B000A77FC7A8E6EF12A"}发送回调信息! [] []
-[2022-06-03 01:45:26] queue.INFO: [2022-06-03 01:45:26] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:45:26] queue.INFO: [2022-06-03 01:45:26] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:45:26] queue.INFO: [2022-06-03 01:45:26] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:45:27] queue.INFO: [2022-06-03 01:45:27] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:46:22] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\\\/6\\\/3 1:32:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"CAE76B511A721B000A77FC7A8E6EF12A"}发送回调信息! [] []
-[2022-06-03 01:46:22] queue.INFO: [2022-06-03 01:46:22] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:46:22] queue.INFO: [2022-06-03 01:46:22] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:46:22] queue.INFO: [2022-06-03 01:46:22] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:46:23] queue.INFO: [2022-06-03 01:46:23] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:46:39] queue.INFO: [2022-06-03 01:46:39] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:46:39] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:32:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"CAE76B511A721B000A77FC7A8E6EF12A"}发送回调信息! [] []
-[2022-06-03 01:46:39] queue.INFO: [2022-06-03 01:46:39] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:46:39] queue.INFO: [2022-06-03 01:46:39] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:46:39] queue.INFO: [2022-06-03 01:46:39] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:47:53] queue.INFO: [2022-06-03 01:47:53] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:47:53] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:32:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"CAE76B511A721B000A77FC7A8E6EF12A"}发送回调信息! [] []
-[2022-06-03 01:47:53] queue.INFO: [2022-06-03 01:47:53] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:47:53] queue.INFO: [2022-06-03 01:47:53] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:47:54] queue.INFO: [2022-06-03 01:47:54] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:49:58] queue.INFO: [2022-06-03 01:49:58] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:49:58] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:32:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"CAE76B511A721B000A77FC7A8E6EF12A"}发送回调信息! [] []
-[2022-06-03 01:49:58] queue.INFO: [2022-06-03 01:49:58] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:49:58] queue.INFO: [2022-06-03 01:49:58] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:49:58] queue.INFO: [2022-06-03 01:49:58] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:51:29] queue.INFO: [2022-06-03 01:51:29] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:51:29] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\\\/6\\\/3 1:32:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"CAE76B511A721B000A77FC7A8E6EF12A"}发送回调信息! [] []
-[2022-06-03 01:51:29] queue.INFO: [2022-06-03 01:51:29] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:51:29] queue.INFO: [2022-06-03 01:51:29] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:51:30] queue.INFO: [2022-06-03 01:51:30] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:55:01] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\\\/6\\\/3 1:32:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"CAE76B511A721B000A77FC7A8E6EF12A"}发送回调信息! [] []
-[2022-06-03 01:55:01] queue.INFO: [2022-06-03 01:55:01] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:55:01] queue.INFO: [2022-06-03 01:55:01] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:55:01] queue.INFO: [2022-06-03 01:55:01] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:55:02] queue.INFO: [2022-06-03 01:55:02] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:55:24] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\\\/6\\\/3 1:32:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"CAE76B511A721B000A77FC7A8E6EF12A"}发送回调信息! [] []
-[2022-06-03 01:55:24] queue.INFO: [2022-06-03 01:55:24] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:55:25] queue.INFO: [2022-06-03 01:55:25] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:55:25] queue.INFO: [2022-06-03 01:55:25] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:55:25] queue.INFO: [2022-06-03 01:55:25] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:55:43] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:32:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"CAE76B511A721B000A77FC7A8E6EF12A"}发送回调信息! [] []
-[2022-06-03 01:55:43] queue.INFO: [2022-06-03 01:55:43] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:55:43] queue.INFO: [2022-06-03 01:55:43] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:55:44] queue.INFO: [2022-06-03 01:55:44] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:55:45] queue.INFO: [2022-06-03 01:55:45] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:56:11] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:32:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"CAE76B511A721B000A77FC7A8E6EF12A"}发送回调信息! [] []
-[2022-06-03 01:56:11] queue.INFO: [2022-06-03 01:56:11] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:56:12] queue.INFO: [2022-06-03 01:56:12] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:56:12] queue.INFO: [2022-06-03 01:56:12] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:56:13] queue.INFO: [2022-06-03 01:56:13] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:56:51] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\\\/6\/3 1:32:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"CAE76B511A721B000A77FC7A8E6EF12A"}发送回调信息! [] []
-[2022-06-03 01:56:51] queue.INFO: [2022-06-03 01:56:51] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:56:51] queue.INFO: [2022-06-03 01:56:51] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 01:56:51] queue.INFO: [2022-06-03 01:56:51] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 01:56:54] queue.INFO: [2022-06-03 01:56:54] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 03:02:02] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-06-03 18:23:55] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\\\/6\/3 1:32:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"CAE76B511A721B000A77FC7A8E6EF12A"}发送回调信息! [] []
-[2022-06-03 18:23:55] queue.INFO: [2022-06-03 18:23:55] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:23:56] queue.INFO: [2022-06-03 18:23:56] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:23:56] queue.INFO: [2022-06-03 18:23:56] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:23:56] queue.INFO: [2022-06-03 18:23:56] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:35:36] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:32:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"CAE76B511A721B000A77FC7A8E6EF12A"}发送回调信息! [] []
-[2022-06-03 18:35:36] queue.INFO: [2022-06-03 18:35:36] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:35:36] queue.INFO: [2022-06-03 18:35:36] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:35:36] queue.INFO: [2022-06-03 18:35:36] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:35:37] queue.INFO: [2022-06-03 18:35:37] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:38:42] queue.INFO: [2022-06-03 18:38:42] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:38:42] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 18:38:42] queue.INFO: [2022-06-03 18:38:42] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:38:42] queue.INFO: [2022-06-03 18:38:42] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:38:43] queue.INFO: [2022-06-03 18:38:43] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:40:10] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 18:40:10] queue.INFO: [2022-06-03 18:40:10] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:40:10] queue.INFO: [2022-06-03 18:40:10] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:40:11] queue.INFO: [2022-06-03 18:40:11] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:40:11] queue.INFO: [2022-06-03 18:40:11] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:40:39] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 18:40:39] queue.INFO: [2022-06-03 18:40:39] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:40:39] queue.INFO: [2022-06-03 18:40:39] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:40:40] queue.INFO: [2022-06-03 18:40:40] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:40:40] queue.INFO: [2022-06-03 18:40:40] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:41:37] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 18:41:37] queue.INFO: [2022-06-03 18:41:37] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:41:37] queue.INFO: [2022-06-03 18:41:37] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:41:38] queue.INFO: [2022-06-03 18:41:38] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:41:38] queue.INFO: [2022-06-03 18:41:38] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:42:20] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 18:42:20] queue.INFO: [2022-06-03 18:42:20] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:42:20] queue.INFO: [2022-06-03 18:42:20] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:42:25] queue.INFO: [2022-06-03 18:42:25] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:42:31] queue.INFO: [2022-06-03 18:42:31] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:43:00] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 18:43:00] queue.INFO: [2022-06-03 18:43:00] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:43:00] queue.INFO: [2022-06-03 18:43:00] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:43:00] queue.INFO: [2022-06-03 18:43:00] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:43:01] queue.INFO: [2022-06-03 18:43:01] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:44:04] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 18:44:04] queue.INFO: [2022-06-03 18:44:04] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:44:04] queue.INFO: [2022-06-03 18:44:04] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:44:04] queue.INFO: [2022-06-03 18:44:04] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:44:05] queue.INFO: [2022-06-03 18:44:05] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:46:38] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 18:46:38] queue.INFO: [2022-06-03 18:46:38] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:46:38] queue.INFO: [2022-06-03 18:46:38] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:46:39] queue.INFO: [2022-06-03 18:46:39] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:46:40] queue.INFO: [2022-06-03 18:46:40] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:46:56] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 18:46:56] queue.INFO: [2022-06-03 18:46:56] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:46:56] queue.INFO: [2022-06-03 18:46:56] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:46:57] queue.INFO: [2022-06-03 18:46:57] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:46:58] queue.INFO: [2022-06-03 18:46:58] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:48:54] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 18:48:54] queue.INFO: [2022-06-03 18:48:54] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:48:55] queue.INFO: [2022-06-03 18:48:55] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:48:55] queue.INFO: [2022-06-03 18:48:55] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:48:56] queue.INFO: [2022-06-03 18:48:56] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:49:51] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 18:49:51] queue.INFO: [2022-06-03 18:49:51] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:49:51] queue.INFO: [2022-06-03 18:49:51] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:49:51] queue.INFO: [2022-06-03 18:49:51] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:49:52] log.ERROR: post_error {"url":"http://noticenter_server.test.wg8.site/api/tg/send/message","0":{"name":"App\\Repositories\\Service\\Payment\\KaopuPayment","message":"查询订单状态异常 data={\"result_state\":false,\"msg\":\"订单号不能为空\"}","content":"{\"code\":\"200\",\"money\":\"30.00\",\"orderDate\":\"2022\\/6\\/3 1:31:54\",\"OrderId\":\"DK202206030131545130\",\"OrderNumber\":\"2ZKEKPMTUA36TOTL\",\"sign\":\"6E11EC3B5F412833531ECC815F8B621F\"}"}} []
-[2022-06-03 18:49:52] queue.INFO: [2022-06-03 18:49:52] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:52:03] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 18:52:03] queue.INFO: [2022-06-03 18:52:03] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:52:03] queue.INFO: [2022-06-03 18:52:03] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:52:03] queue.INFO: [2022-06-03 18:52:03] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:52:04] queue.INFO: [2022-06-03 18:52:04] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:52:21] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 18:52:21] queue.INFO: [2022-06-03 18:52:21] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:52:21] queue.INFO: [2022-06-03 18:52:21] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:52:21] queue.INFO: [2022-06-03 18:52:21] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:52:22] queue.INFO: [2022-06-03 18:52:22] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:53:12] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 18:53:12] queue.INFO: [2022-06-03 18:53:12] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:53:12] queue.INFO: [2022-06-03 18:53:12] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:53:12] queue.INFO: [2022-06-03 18:53:12] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:53:13] queue.INFO: [2022-06-03 18:53:13] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:54:44] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 18:54:44] queue.INFO: [2022-06-03 18:54:44] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:54:44] queue.INFO: [2022-06-03 18:54:44] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:54:45] queue.INFO: [2022-06-03 18:54:45] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:54:46] queue.INFO: [2022-06-03 18:54:46] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:55:19] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 18:55:19] queue.INFO: [2022-06-03 18:55:19] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:55:19] queue.INFO: [2022-06-03 18:55:19] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:55:20] queue.INFO: [2022-06-03 18:55:20] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:55:21] queue.INFO: [2022-06-03 18:55:21] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:55:31] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 18:55:31] queue.INFO: [2022-06-03 18:55:31] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:55:31] queue.INFO: [2022-06-03 18:55:31] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 18:55:32] queue.INFO: [2022-06-03 18:55:32] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 18:55:32] queue.INFO: [2022-06-03 18:55:32] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 19:00:11] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 19:00:11] queue.INFO: [2022-06-03 19:00:11] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 19:00:11] queue.INFO: [2022-06-03 19:00:11] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 19:00:11] queue.INFO: [2022-06-03 19:00:11] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 19:00:12] queue.INFO: [2022-06-03 19:00:12] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 19:01:45] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 19:01:45] queue.INFO: [2022-06-03 19:01:45] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 19:01:46] queue.INFO: [2022-06-03 19:01:46] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 19:01:46] queue.INFO: [2022-06-03 19:01:46] Processing App\Jobs\SendTgMegJob. [] []
-[2022-06-03 19:01:47] queue.INFO: [2022-06-03 19:01:47] Processed App\Jobs\SendTgMegJob. [] []
-[2022-06-03 19:02:15] log.INFO: {"code":"200","money":"30.00","orderDate":"2022\/6\/3 1:31:54","OrderId":"DK202206030131545130","OrderNumber":"2ZKEKPMTUA36TOTL","sign":"6E11EC3B5F412833531ECC815F8B621F"}发送回调信息! [] []
-[2022-06-03 19:02:15] queue.INFO: [2022-06-03 19:02:15] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 19:02:15] queue.INFO: [2022-06-03 19:02:15] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-03 19:02:15] queue.INFO: [2022-06-03 19:02:15] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-06-03 19:02:15] queue.INFO: [2022-06-03 19:02:15] Processing App\Jobs\RebateTwoUserJob. [] []
-[2022-06-03 19:02:16] log.INFO: RebateTwoUserJob:用户没有上级,或者注册时间在活动开始之前 ["ZYMOjZ"] []
-[2022-06-03 19:02:16] queue.INFO: [2022-06-03 19:02:16] Processed App\Jobs\RebateTwoUserJob. [] []
-[2022-06-03 19:02:17] log.INFO: AgentOrderIncJob ["代理系统新增订单",[{"created_at":"2022-06-03 01:31:54","updated_at":"2022-06-03 19:02:15","paid_at":"2022-06-03 19:02:15","channel_uid":"yq2538","invite_uid":"","device_type":"A","user_uid":"ZYMOjZ","order_sn":"DK202206030131545130","pay_type":1,"pay_channel":"Kaopu","payment_code":"1","order_amount":"30.00","real_amount":"30.00","transaction_no":"2ZKEKPMTUA36TOTL","order_type":1,"buy_gold_num":0,"package_info":"{\"id\":1,\"title\":\"VIP\\u5929\\u5361\",\"remark\":\"1\\u5929\\u4f1a\\u5458\\u6743\\u76ca\",\"day\":1,\"price\":\"70.00\",\"true_price\":30,\"sort\":255,\"status\":1,\"color\":\"1\",\"jdata\":{\"feature\":[{\"type\":\"video\",\"count\":1,\"video\":\"1\\u5929\\u65e0\\u9650\\u89c2\\u5f71\"},{\"type\":\"comment\",\"count\":0,\"video\":\"0\\u6761\\u8bc4\\u8bba\\/\\u5929\"},{\"type\":\"house\",\"count\":1,\"video\":\"1\\u6b21\\u5f00\\u623f\\u67e5\\u8be2\"},{\"type\":\"agent\",\"count\":0,\"video\":\"\\u666e\\u901a\\u4ee3\\u7406\"},{\"type\":\"user\",\"count\":0,\"video\":\"\\u7f16\\u8f91\\u8d44\\u6599\"},{\"type\":\"help\",\"count\":0,\"video\":\"\\u65e0\\u6d41\\u91cf\\u6276\\u6301\"}]},\"intro\":\"\\u7acb\\u5373\\u5f00\\u901a \\u4eab\\u4f1a\\u5458\\u798f\\u5229\",\"mark\":\"\\u63a8\\u8350\\u63cf\\u8ff0\\u5929\\u5361\",\"type\":1,\"is_super\":0,\"send_type\":0,\"send_num\":0,\"send_remark\":\"\",\"coins\":300,\"created_at\":\"2020-02-08 03:00:22\",\"updated_at\":\"2022-03-21 18:13:32\",\"coin_remark\":\"\"}","pay_status":1,"order_status":1,"mom_app_uid":"lbQz8E"}]] []
-[2022-06-03 19:02:17] queue.INFO: [2022-06-03 19:02:17] Processed App\Jobs\AgentOrderIncJob. [] []

+ 0 - 7
runtime/logs/hyperf-2022-06-04.log

@@ -1,7 +0,0 @@
-[2022-06-04 00:01:03] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-06-04 00:06:00] log.INFO: CreatorVideoDayInitCommand:完成每日清零创作者视频量 [] []
-[2022-06-04 03:01:02] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-06-04 12:01:03] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-06-04 15:01:02] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-06-04 18:01:03] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-06-04 21:01:03] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []

+ 0 - 34
runtime/logs/hyperf-2022-06-05.log

@@ -1,34 +0,0 @@
-[2022-06-05 00:01:02] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-06-05 00:06:00] log.INFO: CreatorVideoDayInitCommand:完成每日清零创作者视频量 [] []
-[2022-06-05 02:00:22] queue.INFO: [2022-06-05 02:00:22] Processing App\Jobs\AddHyperLogLogJob. [] []
-[2022-06-05 02:00:22] queue.INFO: [2022-06-05 02:00:22] Processing App\Jobs\RefreshLoginTimeJob. [] []
-[2022-06-05 02:00:22] queue.INFO: [2022-06-05 02:00:22] Processing App\Jobs\SentTaskRewardJob. [] []
-[2022-06-05 02:00:22] queue.INFO: [2022-06-05 02:00:22] Processing App\Jobs\AgentUserLoginJob. [] []
-[2022-06-05 02:00:22] queue.INFO: [2022-06-05 02:00:22] Processed App\Jobs\RefreshLoginTimeJob. [] []
-[2022-06-05 02:00:22] queue.INFO: [2022-06-05 02:00:22] Processed App\Jobs\SentTaskRewardJob. [] []
-[2022-06-05 02:00:22] queue.INFO: [2022-06-05 02:00:22] Processing App\Jobs\InitSysMessageJob. [] []
-[2022-06-05 02:00:22] queue.INFO: [2022-06-05 02:00:22] Processed App\Jobs\AddHyperLogLogJob. [] []
-[2022-06-05 02:00:22] queue.ERROR: [2022-06-05 02:00:22] Failed App\Jobs\InitSysMessageJob. [] []
-[2022-06-05 02:00:22] queue.ERROR: Hyperf\Database\Exception\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'wp_dy.sys_message' doesn't exist (SQL: select * from `sys_message` where date(`expired_at`) >= 2022-06-05 01:45:22 order by `created_at` asc limit 5)(42S02) in /var/www/chuji_server/vendor/hyperf/database/src/Connection.php:1082
-Stack trace:
-#0 /var/www/chuji_server/vendor/hyperf/database/src/Connection.php(1039): Hyperf\Database\Connection->runQueryCallback()
-#1 /var/www/chuji_server/vendor/hyperf/database/src/Connection.php(289): Hyperf\Database\Connection->run()
-#2 /var/www/chuji_server/vendor/hyperf/db-connection/src/Connection.php(68): Hyperf\Database\Connection->select()
-#3 /var/www/chuji_server/vendor/hyperf/db-connection/src/Traits/DbConnection.php(41): Hyperf\DbConnection\Connection->__call()
-#4 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(2736): Hyperf\DbConnection\Connection->select()
-#5 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(1878): Hyperf\Database\Query\Builder->runSelect()
-#6 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(2901): Hyperf\Database\Query\Builder->Hyperf\Database\Query\{closure}()
-#7 /var/www/chuji_server/vendor/hyperf/database/src/Query/Builder.php(1879): Hyperf\Database\Query\Builder->onceWithColumns()
-#8 /var/www/chuji_server/vendor/hyperf/database/src/Model/Builder.php(591): Hyperf\Database\Query\Builder->get()
-#9 /var/www/chuji_server/vendor/hyperf/database/src/Model/Builder.php(575): Hyperf\Database\Model\Builder->getModels()
-#10 /var/www/chuji_server/app/Repositories/SysMessageRepository.php(40): Hyperf\Database\Model\Builder->get()
-#11 /var/www/chuji_server/private_vendor/kz2/cacheplus/src/Factories/CacheFactory.php(35): App\Repositories\SysMessageRepository->App\Repositories\{closure}()
-#12 /var/www/chuji_server/app/Repositories/SysMessageRepository.php(46): KZ2\Hyperf\CachePlus\Factories\CacheFactory->remember()
-#13 /var/www/chuji_server/app/Repositories/SysMessageRepository.php(59): App\Repositories\SysMessageRepository->getTopLists()
-#14 /var/www/chuji_server/app/Jobs/InitSysMessageJob.php(24): App\Repositories\SysMessageRepository->initForUser()
-#15 /var/www/chuji_server/vendor/hyperf/async-queue/src/Driver/Driver.php(130): App\Jobs\InitSysMessageJob->handle()
-#16 /var/www/chuji_server/vendor/hyperf/utils/src/Coroutine/Concurrent.php(75): Hyperf\AsyncQueue\Driver\Driver->Hyperf\AsyncQueue\Driver\{closure}()
-#17 /var/www/chuji_server/vendor/hyperf/utils/src/Functions.php(274): Hyperf\Utils\Coroutine\Concurrent->Hyperf\Utils\Coroutine\{closure}()
-#18 /var/www/chuji_server/vendor/hyperf/utils/src/Coroutine.php(62): call()
-#19 {main} [] []
-[2022-06-05 02:00:23] queue.INFO: [2022-06-05 02:00:23] Processed App\Jobs\AgentUserLoginJob. [] []

+ 0 - 35
runtime/logs/hyperf-2022-06-07.log

@@ -1,35 +0,0 @@
-[2022-06-07 17:19:47] log.INFO: {"mch_id":"50","trade_no":"X18985997271565061","out_trade_no":"DK202206071637135561","money":"30","notify_time":"2022-06-07 16:40:50","state":"2","psg_trade_no":"0","subject":"pay","sign":"00BD3BECD8F4697BACF7019C93E0B3A4"}发送回调信息! [] []
-[2022-06-07 17:19:47] queue.INFO: [2022-06-07 17:19:47] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-07 17:19:47] queue.INFO: [2022-06-07 17:19:47] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-07 17:21:32] log.INFO: {"mch_id":"50","trade_no":"X18985997271565061","out_trade_no":"DK202206071637135561","money":"30","notify_time":"2022-06-07 16:40:50","state":"2","psg_trade_no":"0","subject":"pay","sign":"00BD3BECD8F4697BACF7019C93E0B3A4"}发送回调信息! [] []
-[2022-06-07 17:21:32] queue.INFO: [2022-06-07 17:21:32] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-07 17:21:32] queue.INFO: [2022-06-07 17:21:32] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-07 17:21:49] log.INFO: {"mch_id":"50","trade_no":"X18985997271565061","out_trade_no":"DK202206071637135561","money":"30","notify_time":"2022-06-07 16:40:50","state":"2","psg_trade_no":"0","subject":"pay","sign":"00BD3BECD8F4697BACF7019C93E0B3A4"}发送回调信息! [] []
-[2022-06-07 17:21:49] queue.INFO: [2022-06-07 17:21:49] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-07 17:21:49] queue.INFO: [2022-06-07 17:21:49] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-07 17:22:14] log.INFO: {"mch_id":"50","trade_no":"X18985997271565061","out_trade_no":"DK202206071637135561","money":"30","notify_time":"2022-06-07 16:40:50","state":"2","psg_trade_no":"0","subject":"pay","sign":"00BD3BECD8F4697BACF7019C93E0B3A4"}发送回调信息! [] []
-[2022-06-07 17:22:14] queue.INFO: [2022-06-07 17:22:14] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-07 17:22:14] queue.INFO: [2022-06-07 17:22:14] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-07 17:22:27] log.INFO: {"mch_id":"50","trade_no":"X18985997271565061","out_trade_no":"DK202206071637135561","money":"30","notify_time":"2022-06-07 16:40:50","state":"2","psg_trade_no":"0","subject":"pay","sign":"00BD3BECD8F4697BACF7019C93E0B3A4"}发送回调信息! [] []
-[2022-06-07 17:22:27] queue.INFO: [2022-06-07 17:22:27] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-07 17:22:27] queue.INFO: [2022-06-07 17:22:27] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-07 17:22:44] log.INFO: {"mch_id":"50","trade_no":"X18985997271565061","out_trade_no":"DK202206071637135561","money":"30","notify_time":"2022-06-07 16:40:50","state":"2","psg_trade_no":"0","subject":"pay","sign":"00BD3BECD8F4697BACF7019C93E0B3A4"}发送回调信息! [] []
-[2022-06-07 17:22:44] queue.INFO: [2022-06-07 17:22:44] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-07 17:22:44] queue.INFO: [2022-06-07 17:22:44] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-07 17:23:41] log.INFO: {"mch_id":"50","trade_no":"X18985997271565061","out_trade_no":"DK202206071637135561","money":"30","notify_time":"2022-06-07 16:40:50","state":"2","psg_trade_no":"0","subject":"pay","sign":"00BD3BECD8F4697BACF7019C93E0B3A4"}发送回调信息! [] []
-[2022-06-07 17:23:41] queue.INFO: [2022-06-07 17:23:41] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-07 17:23:42] queue.INFO: [2022-06-07 17:23:42] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-07 17:24:13] log.INFO: {"mch_id":"50","trade_no":"X18985997271565061","out_trade_no":"DK202206071637135561","money":"30","notify_time":"2022-06-07 16:40:50","state":"2","psg_trade_no":"0","subject":"pay","sign":"00BD3BECD8F4697BACF7019C93E0B3A4"}发送回调信息! [] []
-[2022-06-07 17:24:13] queue.INFO: [2022-06-07 17:24:13] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-07 17:24:13] queue.INFO: [2022-06-07 17:24:13] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-07 17:24:39] log.INFO: {"mch_id":"50","trade_no":"X18985997271565061","out_trade_no":"DK202206071637135561","money":"30","notify_time":"2022-06-07 16:40:50","state":"2","psg_trade_no":"0","subject":"pay","sign":"00BD3BECD8F4697BACF7019C93E0B3A4"}发送回调信息! [] []
-[2022-06-07 17:24:39] queue.INFO: [2022-06-07 17:24:39] Processing App\Jobs\AddPayNotifyJob. [] []
-[2022-06-07 17:24:39] queue.INFO: [2022-06-07 17:24:39] Processed App\Jobs\AddPayNotifyJob. [] []
-[2022-06-07 17:24:40] queue.INFO: [2022-06-07 17:24:40] Processing App\Jobs\AgentOrderIncJob. [] []
-[2022-06-07 17:24:40] queue.INFO: [2022-06-07 17:24:40] Processing App\Jobs\RebateTwoUserJob. [] []
-[2022-06-07 17:24:40] log.INFO: RebateTwoUserJob:用户没有上级,或者注册时间在活动开始之前 ["ZYMOjZ"] []
-[2022-06-07 17:24:40] queue.INFO: [2022-06-07 17:24:40] Processed App\Jobs\RebateTwoUserJob. [] []
-[2022-06-07 17:24:43] log.INFO: AgentOrderIncJob ["代理系统新增订单",[{"created_at":"2022-06-07 16:37:13","updated_at":"2022-06-07 17:24:40","paid_at":"2022-06-07 17:24:40","channel_uid":"yq2538","invite_uid":"","device_type":"A","user_uid":"ZYMOjZ","order_sn":"DK202206071637135561","pay_type":2,"pay_channel":"Fangzhou","payment_code":"2","order_amount":"30.00","real_amount":"30.00","transaction_no":"X18985997271565061","order_type":1,"buy_gold_num":0,"package_info":"{\"id\":1,\"title\":\"VIP\\u5929\\u5361\",\"remark\":\"1\\u5929\\u4f1a\\u5458\\u6743\\u76ca\",\"day\":1,\"price\":\"70.00\",\"true_price\":30,\"sort\":255,\"status\":1,\"color\":\"1\",\"jdata\":{\"feature\":[{\"type\":\"video\",\"count\":1,\"video\":\"1\\u5929\\u65e0\\u9650\\u89c2\\u5f71\"},{\"type\":\"comment\",\"count\":0,\"video\":\"0\\u6761\\u8bc4\\u8bba\\/\\u5929\"},{\"type\":\"house\",\"count\":1,\"video\":\"1\\u6b21\\u5f00\\u623f\\u67e5\\u8be2\"},{\"type\":\"agent\",\"count\":0,\"video\":\"\\u666e\\u901a\\u4ee3\\u7406\"},{\"type\":\"user\",\"count\":0,\"video\":\"\\u7f16\\u8f91\\u8d44\\u6599\"},{\"type\":\"help\",\"count\":0,\"video\":\"\\u65e0\\u6d41\\u91cf\\u6276\\u6301\"}]},\"intro\":\"\\u7acb\\u5373\\u5f00\\u901a \\u4eab\\u4f1a\\u5458\\u798f\\u5229\",\"mark\":\"\\u63a8\\u8350\\u63cf\\u8ff0\\u5929\\u5361\",\"type\":1,\"is_super\":0,\"send_type\":0,\"send_num\":0,\"send_remark\":\"\",\"coins\":300,\"created_at\":\"2020-02-08 03:00:22\",\"updated_at\":\"2022-03-21 18:13:32\",\"coin_remark\":\"\"}","pay_status":1,"order_status":1,"mom_app_uid":"lbQz8E"}]] []
-[2022-06-07 17:24:43] queue.INFO: [2022-06-07 17:24:43] Processed App\Jobs\AgentOrderIncJob. [] []
-[2022-06-07 18:01:03] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-06-07 21:01:04] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []

+ 0 - 2
runtime/logs/hyperf-2022-06-08.log

@@ -1,2 +0,0 @@
-[2022-06-08 00:01:02] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-06-08 00:06:00] log.INFO: CreatorVideoDayInitCommand:完成每日清零创作者视频量 [] []

+ 0 - 2
runtime/logs/hyperf-2022-06-09.log

@@ -1,2 +0,0 @@
-[2022-06-09 06:01:03] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []
-[2022-06-09 12:01:02] log.INFO: VideoHomeCacheCommand-缓存视频首页 [] []

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