provider.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <?php
  2. require_once(BASE_CONFIG_PATH . CONFIG_PREFIX . '/refill.ini.php');
  3. class providerControl extends SystemControl
  4. {
  5. public function __construct()
  6. {
  7. parent::__construct();
  8. }
  9. public function indexOp()
  10. {
  11. $this->sync_cfgs();
  12. $provider_model = Model('refill_provider');
  13. $condition = [];
  14. if (trim($_GET['name']) != '') {
  15. $condition['name'] = ['like', '%' . $_GET['name'] . '%'];
  16. Tpl::output('name', $_GET['name']);
  17. }
  18. if (in_array($_GET['type'], [1, 2])) {
  19. $condition['type'] = $_GET['type'];
  20. }
  21. $store_list = Model('store')->getStoreList(['store_id' => ['gt',0]], '', '', 'store_id,store_name');
  22. foreach ($store_list as $store) {
  23. $stores[$store['store_id']] = $store['store_name'];
  24. }
  25. $provider_list = $provider_model->getProviderList($condition, 100);
  26. foreach ($provider_list as $key => $provider) {
  27. if (!empty($provider['start_period']) && !empty($provider['end_period'])) {
  28. $provider_list[$key]['period'] = $provider['start_period'] . '~' . $provider['end_period'];
  29. } else {
  30. $provider_list[$key]['period'] = '全时间段';
  31. }
  32. $provider_list[$key]['store_name'] = $stores[$provider['store_id']];
  33. }
  34. $opened_text = ['使用中', '已禁用'];
  35. $type_text = ['油卡', '手机充值卡'];
  36. Tpl::output('opened_text', $opened_text);
  37. Tpl::output('type_text', $type_text);
  38. Tpl::output('provider_list', $provider_list);
  39. Tpl::output('show_page', $provider_model->showpage());
  40. Tpl::showpage('provider.index');
  41. }
  42. public function sync_cfgs()
  43. {
  44. $name_val = function ($items) {
  45. $result = [];
  46. foreach ($items as $item) {
  47. $name = $item['name'];
  48. $result[$name] = $item;
  49. }
  50. return $result;
  51. };
  52. $match = function ($all, $cur) {
  53. $inserts = $updates = [];
  54. foreach ($all as $key => $value) {
  55. if (!array_key_exists($key, $cur)) {
  56. $insert['name'] = $key;
  57. $insert['store_id'] = $value['cfg']['store_id'];
  58. $insert['qualitys'] = $value['cfg']['qualitys'];
  59. $inserts[] = $insert;
  60. } elseif ($value['cfg']['qualitys'] != $cur[$key]['qualitys']) {
  61. $update['provider_id'] = $cur[$key]['provider_id'];
  62. $update['qualitys'] = $value['cfg']['qualitys'];
  63. $updates[] = $update;
  64. }
  65. }
  66. return [$inserts, $updates];
  67. };
  68. $updater = function ($mod, $updates) {
  69. if (empty($updates)) return;
  70. foreach ($updates as $update) {
  71. $provider_id = $update['provider_id'];
  72. $data = ['qualitys' => $update['qualitys']];
  73. $mod->editProvider($data, ['provider_id' => $provider_id]);
  74. }
  75. };
  76. $inserter = function ($mod, $type, $names) {
  77. foreach ($names as $name) {
  78. $data = ['name' => $name['name'], 'type' => $type, 'store_id' => $name['store_id'], 'qualitys' => $name['qualitys'], 'opened' => 2];
  79. $mod->insert($data);
  80. }
  81. };
  82. global $config;
  83. $oil_configs = $config['oil_providers'];
  84. $pho_configs = $config['phone_providers'];
  85. $oils = $name_val($oil_configs);
  86. $phones = $name_val($pho_configs);
  87. $mod_prov = Model('refill_provider');
  88. $oil_items = $mod_prov->getProviderList(['type' => 1]);
  89. $oil_items = $name_val($oil_items);
  90. [$oil_inserts, $oil_updates] = $match($oils, $oil_items);
  91. $phone_items = $mod_prov->getProviderList(['type' => 2]);
  92. $phone_items = $name_val($phone_items);
  93. [$phone_inserts, $phone_updates] = $match($phones, $phone_items);
  94. $inserter($mod_prov, 1, $oil_inserts);
  95. $inserter($mod_prov, 2, $phone_inserts);
  96. $updater($mod_prov, $oil_updates);
  97. $updater($mod_prov, $phone_updates);
  98. }
  99. }