provider.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <?php
  2. include(BASE_CONFIG_PATH . CONFIG_PREFIX . '/refill.ini.php');
  3. require_once(BASE_HELPER_PATH . '/refill/RefillFactory.php');
  4. require_once(BASE_CORE_PATH . '/framework/function/http.php');
  5. require_once(BASE_HELPER_PATH . '/refill/divert_account.php');
  6. require_once (BASE_HELPER_PATH . '/model/member_info.php');
  7. class providerControl extends SystemControl
  8. {
  9. public function __construct()
  10. {
  11. parent::__construct();
  12. }
  13. public function indexOp()
  14. {
  15. $this->sync_cfgs();
  16. $provider_model = Model('refill_provider');
  17. $condition = [];
  18. if (trim($_GET['name']) != '') {
  19. $condition['store_name'] = ['like', '%' . $_GET['name'] . '%'];
  20. Tpl::output('name', $_GET['name']);
  21. }
  22. if (in_array($_GET['type'], [1, 2])) {
  23. $condition['type'] = $_GET['type'];
  24. }
  25. $provider_list = $provider_model->table('refill_provider,store')
  26. ->field('refill_provider.*,store.store_name')
  27. ->join('inner')
  28. ->on('store.store_id=refill_provider.store_id')
  29. ->where($condition)
  30. ->order('opened asc, name asc')
  31. ->page(100)
  32. ->select();
  33. foreach ($provider_list as $key => $provider) {
  34. if (!empty($provider['start_period']) && !empty($provider['end_period'])) {
  35. $provider_list[$key]['period'] = $provider['start_period'] . '~' . $provider['end_period'];
  36. } else {
  37. $provider_list[$key]['period'] = '全时间段';
  38. }
  39. }
  40. $opened_text = ['使用中', '已禁用'];
  41. $type_text = ['油卡', '手机充值卡', '增值业务'];
  42. Tpl::output('opened_text', $opened_text);
  43. Tpl::output('type_text', $type_text);
  44. Tpl::output('provider_list', $provider_list);
  45. Tpl::output('show_page', $provider_model->showpage());
  46. Tpl::showpage('provider.index');
  47. }
  48. public function sync_cfgs()
  49. {
  50. $name_val = function ($items) {
  51. $result = [];
  52. foreach ($items as $item) {
  53. $name = $item['name'];
  54. $result[$name] = $item;
  55. }
  56. return $result;
  57. };
  58. $match = function ($all, $cur) {
  59. $inserts = $updates = [];
  60. foreach ($all as $key => $value) {
  61. if (!array_key_exists($key, $cur)) {
  62. $insert['name'] = $key;
  63. $insert['store_id'] = $value['cfg']['store_id'];
  64. $insert['qualitys'] = $value['cfg']['qualitys'];
  65. $inserts[] = $insert;
  66. } elseif ($value['cfg']['qualitys'] != $cur[$key]['qualitys']) {
  67. $update['provider_id'] = $cur[$key]['provider_id'];
  68. $update['qualitys'] = $value['cfg']['qualitys'];
  69. $updates[] = $update;
  70. }
  71. }
  72. return [$inserts, $updates];
  73. };
  74. $updater = function ($mod, $updates) {
  75. if (empty($updates)) return;
  76. foreach ($updates as $update) {
  77. $provider_id = $update['provider_id'];
  78. $data = ['qualitys' => $update['qualitys']];
  79. $mod->editProvider($data, ['provider_id' => $provider_id]);
  80. }
  81. };
  82. $inserter = function ($mod, $type, $names) {
  83. $model_member = Model('member');
  84. foreach ($names as $name) {
  85. $insert_member['member_name'] = md5($name['name'] . time());
  86. $insert_member['member_passwd'] = $name['name'];
  87. $insert_id = $model_member->addMember($insert_member);
  88. $helper = new refill\divert_account();
  89. $helper->init_member($insert_id);
  90. $data = ['name' => $name['name'], 'type' => $type, 'store_id' => $name['store_id'], 'qualitys' => $name['qualitys'], 'opened' => 2, 'account_id' => $insert_id];
  91. $mod->insert($data);
  92. }
  93. };
  94. global $config;
  95. $oil_configs = $config['oil_providers'];
  96. $pho_configs = $config['phone_providers'];
  97. $third_configs = $config['third_providers'];
  98. $oils = $name_val($oil_configs);
  99. $phones = $name_val($pho_configs);
  100. $third = $name_val($third_configs);
  101. $mod_prov = Model('refill_provider');
  102. $oil_items = $mod_prov->getProviderList(['type' => 1]);
  103. $oil_items = $name_val($oil_items);
  104. [$oil_inserts, $oil_updates] = $match($oils, $oil_items);
  105. $phone_items = $mod_prov->getProviderList(['type' => 2]);
  106. $phone_items = $name_val($phone_items);
  107. [$phone_inserts, $phone_updates] = $match($phones, $phone_items);
  108. $third_items = $mod_prov->getProviderList(['type' => 3]);
  109. $third_items = $name_val($third_items);
  110. [$third_inserts, $third_updates] = $match($third, $third_items);
  111. $inserter($mod_prov, 1, $oil_inserts);
  112. $inserter($mod_prov, 2, $phone_inserts);
  113. $inserter($mod_prov, 3, $third_inserts);
  114. $updater($mod_prov, $oil_updates);
  115. $updater($mod_prov, $phone_updates);
  116. $updater($mod_prov, $third_updates);
  117. }
  118. public function ProviderBalanceOp()
  119. {
  120. $provider_model = Model('refill_provider');
  121. $provider_id = $_GET['id'] ?? $_POST['id'];
  122. $provider_info = $provider_model->getProviderInfo(['provider_id' => $provider_id]);
  123. if (empty($provider_info)) {
  124. exit(json_encode(['code' => 500, 'balance' => 0, 'msg' => '通道信息有误']));
  125. }
  126. $channel_name = $provider_info['name'];
  127. if ($provider_info['type'] == 1) {
  128. $type = 'RefillOil';
  129. } elseif ($provider_info['type'] == 2) {
  130. $type = 'RefillPhone';
  131. } else {
  132. $type = '';
  133. }
  134. $provider = $this->getProvider($channel_name,$type);
  135. [$state, $balance] = $provider->balance();
  136. if(!$state) {
  137. Log::record("query balance err, channel_name:{$channel_name}, err_msg:{$balance}");
  138. exit(json_encode(['code' => 500, 'balance' => 0, 'msg' => $balance]));
  139. }else{
  140. exit(json_encode(['code' => 200, 'balance' => $balance, 'msg' => 'success']));
  141. }
  142. }
  143. private function getProvider($name,$type = 'RefillPhone')
  144. {
  145. $file = BASE_HELPER_RAPI_PATH . "/$name/{$type}.php";
  146. if(!file_exists($file)){
  147. Log::record("provider api file={$file} not exist.",Log::DEBUG);
  148. return false;
  149. } else {
  150. require_once($file);
  151. Log::record("file={$file} load success.",Log::DEBUG);
  152. }
  153. $class_name = "refill\\{$name}\\{$type}";
  154. if (class_exists($class_name, false)) {
  155. $caller = new $class_name([]);
  156. return $caller;
  157. } else {
  158. $error = "Base Error: class {$class_name} isn't exists!";
  159. Log::record($error, Log::ERR);
  160. return false;
  161. }
  162. }
  163. }