Account.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <?php namespace Api\Lib;
  2. use Dever;
  3. # 官方平台账户
  4. class Account
  5. {
  6. public function update($db, $data)
  7. {
  8. if (isset($data['app_platform']) && $data['app_platform']) {
  9. $app_platform = $data['app_platform'];
  10. if (is_string($app_platform)) {
  11. $app_platform = explode(',', $app_platform);
  12. }
  13. $data['app_id'] = $app_platform[0];
  14. $data['platform_id'] = $app_platform[1] ?? 0;
  15. if (!$data['platform_id']) {
  16. Dever::error('请选择平台');
  17. }
  18. }
  19. return $data;
  20. }
  21. # 同步某个项目下的账户信息
  22. public function sync($project)
  23. {
  24. # 跨库了
  25. //return Dever::db($project . '/account')->copy('api_account', ['a.sync' => 1], ['key', 'name']);
  26. $col = '`key`,name,cdate';
  27. $list = Dever::db('api/account')->select(['sync' => 1], ['col' => $col]);
  28. Dever::db($project . '/account')->inserts(['field' => $col, 'value' => $list]);
  29. }
  30. # 根据应用功能获取账户列表
  31. public function getList($key)
  32. {
  33. $func = Dever::db('api/app_func')->find(['key' => $key, 'status' => 1]);
  34. if ($func) {
  35. $work = Dever::db('api/app_func_work')->columns(['app_func_id' => $func['id'], 'status' => 1], 'platform_id');
  36. $account = Dever::db('api/account')->select(['platform_id' => ['in', $work]]);
  37. return $account;
  38. }
  39. return [];
  40. }
  41. # 获取某个项目的账户信息
  42. public function get($account, $project = 'api', $setting = false)
  43. {
  44. if (is_array($account)) {
  45. return $account;
  46. }
  47. if (is_numeric($account)) {
  48. $where = ['id' => $account];
  49. } else {
  50. $where = ['key' => $account];
  51. }
  52. $account = Dever::db('api/account')->find($where);
  53. if ($account && $project != 'api') {
  54. $info = Dever::db($project . '/account')->find(['key' => $account['key']]);
  55. if ($info) {
  56. $info['app_id'] = $account['app_id'];
  57. $info['platform_id'] = $account['platform_id'];
  58. $account = $info;
  59. } else {
  60. Dever::error('账户无效');
  61. }
  62. }
  63. if ($account && $setting) {
  64. $account['setting'] = [];
  65. $setting = Dever::db($project . '/account_setting')->select(['account_id' => $account['id']]);
  66. if ($setting) {
  67. foreach ($setting as $k => $v) {
  68. $info = Dever::db('api/platform_setting')->find($v['platform_setting_id']);
  69. if ($info) {
  70. $v['key'] = $info['key'];
  71. $account['setting'][$v['key']] = $v['value'];
  72. } else {
  73. Dever::error('account error');
  74. }
  75. }
  76. }
  77. }
  78. return $account;
  79. }
  80. public function run($account, $func, $param = [], $env = 1, $method = 'run', $project = 'api')
  81. {
  82. $account = $this->get($account, $project);
  83. if (!$account) {
  84. Dever::error('账户无效');
  85. }
  86. if (!is_array($func)) {
  87. $func = Dever::db('api/app_func')->find(['app_id' => $account['app_id'], 'key' => $func]);
  88. }
  89. if (!$func) {
  90. Dever::error('功能无效');
  91. }
  92. $api = Dever::load(App::class)->getApi($func['id'], $env);
  93. if (!$api) {
  94. Dever::error('接口无效');
  95. }
  96. $param['account_project'] = $project;
  97. $param['account_id'] = $account['id'];
  98. $result = [];
  99. if ($func['type'] == 1) {
  100. # 仅执行第一个
  101. $result = Dever::load(Api::class)->$method($api[0], $param);
  102. if (is_array($result)) {
  103. $result['account_id'] = $account['id'];
  104. $result['api_id'] = $api[0]['id'];
  105. }
  106. } elseif ($func['type'] == 2) {
  107. # 同步执行
  108. foreach ($api as $k => $v) {
  109. $result = Dever::load(Api::class)->$method($v, $param);
  110. if ($result && is_array($result)) {
  111. $param = array_merge($result, $param);
  112. }
  113. }
  114. } elseif ($func['type'] == 3) {
  115. # 异步执行
  116. $result = true;
  117. foreach ($api as $k => $v) {
  118. $param['api_id'] = $v['id'];
  119. \Dever\Helper\Cmd::run('task.api', $param, 'api');
  120. }
  121. }
  122. return $result;
  123. }
  124. }