provider_ctl.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?php
  2. include(BASE_CONFIG_PATH . CONFIG_PREFIX . '/refill.ini.php');
  3. require_once(BASE_CORE_PATH . '/framework/libraries/cache.php');
  4. class provider_ctlControl extends SystemControl
  5. {
  6. public function __construct()
  7. {
  8. parent::__construct();
  9. }
  10. public function indexOp()
  11. {
  12. $type = $_GET['type'] ?? $_POST['type'];
  13. if(empty($type)) $type = 2;
  14. $form = $_GET['form'] ?? $_POST['form'];
  15. if(empty($form)) $form = 'common';
  16. $rkey = $this->speed_key($type, $form);
  17. $quality = [
  18. 'common' => refill\Quality::Normal, 'fast' => refill\Quality::Quick, 'card' => refill\Quality::CardKey,
  19. 'third' => refill\Quality::ThirdShop, 'slow' => refill\Quality::SlowTwentyFour, 'slow6' => refill\Quality::SlowSix,
  20. 'slow2' => refill\Quality::SlowTwo, 'slow48' => refill\Quality::SlowFortyEight, 'slow72' => refill\Quality::SlowSeventyTwo,
  21. 'fastest' => refill\Quality::Fastest
  22. ];
  23. if (chksubmit()) {
  24. $provider_list = $this->providers();
  25. foreach ($provider_list as $provider) {
  26. $providers[$provider['provider_id']] = $provider;
  27. }
  28. $strs = $_POST['str'];
  29. $speeds = $_POST['speed'];
  30. $sorts = $_POST['sort'];
  31. $openeds = $_POST['opened'];
  32. foreach ($strs as $key => $str) {
  33. $item = explode('-', $str);
  34. $pid = $item[0];
  35. $type = $item[1];
  36. $amount = $item[2];
  37. $has = $item[3];
  38. if ($has == 0) {
  39. continue;
  40. }
  41. $data['pid'] = intval($pid);
  42. $data['name'] = $providers[$pid]['name'];
  43. $data['type'] = intval($type);
  44. $data['amount'] = intval($amount);
  45. $data['speed'] = intval($speeds[$key]);
  46. $data['sort'] = intval($sorts[$key]);
  47. $data['opened'] = intval($openeds[$key]);
  48. $index = "{$data['type']}-{$data['amount']}";
  49. $result[$index][] = $data;
  50. }
  51. wcache($rkey, ['data' => serialize($result)], 'provider-');
  52. showMessage('编辑成功');
  53. } else {
  54. $speed_limit = rcache($rkey, 'provider-');
  55. if (empty($speed_limit)) {
  56. $speed_limit = [];
  57. } else {
  58. $speed_limit = unserialize($speed_limit['data']);
  59. }
  60. // $ins = Cache::getInstance('cacheredis');
  61. // $channel_ctl_model_body = $ins->get_org('refill_channel_control_model');
  62. $channel_ctl_model_body = rkcache('refill_channel_control_model');
  63. $str = json_decode($channel_ctl_model_body);
  64. Log::record("channel_control_model:{$str}");
  65. $channel_ctl_model = json_decode($str, true);
  66. if(empty($channel_ctl_model)) $channel_ctl_model = [];
  67. $initialiser = function ($provider) {
  68. $data['pid'] = $provider['provider_id'];
  69. $data['name'] = $provider['name'];
  70. $data['speed'] = -1;
  71. $data['sort'] = 1;
  72. $data['opened'] = 1;
  73. return $data;
  74. };
  75. $providers = Model('')->table('refill_provider,store')
  76. ->field('refill_provider.*,store.store_name')
  77. ->join('inner')
  78. ->on('store.store_id=refill_provider.store_id')
  79. ->where(['type' => $type, 'qualitys' => ['like', '%' . $quality[$form] . '%']])
  80. ->limit(1000)
  81. ->order('opened asc , sort desc')
  82. ->select();
  83. if (empty($providers)) {
  84. showMessage('暂无相关通道', 'index.php?act=provider&op=index');
  85. }
  86. $formData = $this->formData($type, $form);
  87. $amounts = $formData['amounts'];
  88. $cfgs = $formData['cfgs'];
  89. $types = $formData['types'];
  90. if (!empty($speed_limit)) {
  91. foreach ($speed_limit as $key => $speed) {
  92. foreach ($speed as $value) {
  93. $speed_limit[$key][$value['pid']] = $value;
  94. }
  95. }
  96. }
  97. $ProviderManager = new refill\ProviderManager();
  98. $ProviderManager->load();
  99. $QPTA = $ProviderManager->getQPTA();
  100. $QPTA = $QPTA[$quality[$form]];
  101. foreach ($providers as $key => $provider) {
  102. $result = [];
  103. $pid = $provider['provider_id'];
  104. $name = $provider['name'];
  105. if (empty($cfgs) || !array_key_exists($name, $cfgs)) {
  106. unset($providers[$key]);
  107. continue;
  108. }
  109. foreach ($types as $type) {
  110. foreach ($amounts as $k => $amount) {
  111. $key = $type . '-' . $amount;
  112. if (is_array($speed_limit[$key]) && array_key_exists($pid, $speed_limit[$key])) {
  113. $speed = $speed_limit[$key][$pid];
  114. } else {
  115. $speed = $initialiser($provider);
  116. }
  117. if (is_array($QPTA["{$name}-{$type}-{$amount}"]) && array_key_exists("{$name}-{$type}-{$amount}", $QPTA)) {
  118. $speed['has'] = 1;
  119. } else {
  120. $speed['has'] = 0;
  121. }
  122. $result[] = $speed;
  123. }
  124. }
  125. $datas[$pid] = $result;
  126. }
  127. if (empty($datas)) {
  128. showMessage('暂无相关通道配置', 'index.php?act=provider&op=index');
  129. }
  130. Tpl::output('form', $formData);
  131. Tpl::output('datas', $datas);
  132. Tpl::output('providers', $providers);
  133. Tpl::output('channel_ctl_model', $channel_ctl_model);
  134. Tpl::showpage('provider.amount.control');
  135. }
  136. }
  137. private function speed_key($type, $form)
  138. {
  139. if ($type == 1) {
  140. $rkey = "channel-ctl-oil-{$form}-limit";
  141. } elseif ($type == 2) {
  142. $rkey = "channel-ctl-phone-{$form}-limit";
  143. } else {
  144. showMessage('类型有误', "index.php?act=provider&op=index");
  145. }
  146. Log::record($rkey, Log::DEBUG);
  147. return $rkey;
  148. }
  149. private function formData($type, $form)
  150. {
  151. global $config;
  152. $texts = [
  153. ["中石油", '中石化'], ['移动', '联通', '电信']
  154. ];
  155. $type_data = [[1, 2], [4, 5, 6]];
  156. $type_text = $texts[$type - 1];
  157. $type_data = $type_data[$type - 1];
  158. $amounts = [];
  159. if ($type == 1) {
  160. $amounts = $config['refill_oil_specs'];
  161. $cfgs = $config['oil_providers'];
  162. }
  163. if ($type == 2) {
  164. $amounts = $config['refill_phone_specs'];
  165. $cfgs = $config['phone_providers'];
  166. if ($form == 'fast') {
  167. //快充质量,加小面值
  168. $amounts = array_merge($config['refill_phone_small_specs'], $amounts);
  169. }
  170. }
  171. foreach ($type_text as $key => $value) {
  172. foreach ($amounts as $amount) {
  173. $data['text'] = $value . '-' . $amount . '元';
  174. $data['type'] = $type_data[$key];
  175. $data['amount'] = $amount;
  176. $amountData[] = $data;
  177. }
  178. }
  179. foreach ($cfgs as $cfg) {
  180. $pcfgs[$cfg['name']] = $cfg;
  181. }
  182. return ['amountData' => $amountData, 'form' => $form, 'amounts' => $amounts, 'types' => $type_data, 'cfgs' => $pcfgs];
  183. }
  184. }