provider.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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['store_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. $provider_list = $provider_model->table('refill_provider,store')
  22. ->field('refill_provider.*,store.store_name')
  23. ->join('inner')
  24. ->on('store.store_id=refill_provider.store_id')
  25. ->where($condition)
  26. ->order('opened asc, name asc')
  27. ->page(10)
  28. ->select();
  29. foreach ($provider_list as $key => $provider) {
  30. if (!empty($provider['start_period']) && !empty($provider['end_period'])) {
  31. $provider_list[$key]['period'] = $provider['start_period'] . '~' . $provider['end_period'];
  32. } else {
  33. $provider_list[$key]['period'] = '全时间段';
  34. }
  35. }
  36. $opened_text = ['使用中', '已禁用'];
  37. $type_text = ['油卡', '手机充值卡', '增值业务'];
  38. Tpl::output('opened_text', $opened_text);
  39. Tpl::output('type_text', $type_text);
  40. Tpl::output('provider_list', $provider_list);
  41. Tpl::output('show_page', $provider_model->showpage());
  42. Tpl::showpage('provider.index');
  43. }
  44. public function sync_cfgs()
  45. {
  46. $name_val = function ($items) {
  47. $result = [];
  48. foreach ($items as $item) {
  49. $name = $item['name'];
  50. $result[$name] = $item;
  51. }
  52. return $result;
  53. };
  54. $match = function ($all, $cur) {
  55. $inserts = $updates = [];
  56. foreach ($all as $key => $value) {
  57. if (!array_key_exists($key, $cur)) {
  58. $insert['name'] = $key;
  59. $insert['store_id'] = $value['cfg']['store_id'];
  60. $insert['qualitys'] = $value['cfg']['qualitys'];
  61. $inserts[] = $insert;
  62. } elseif ($value['cfg']['qualitys'] != $cur[$key]['qualitys']) {
  63. $update['provider_id'] = $cur[$key]['provider_id'];
  64. $update['qualitys'] = $value['cfg']['qualitys'];
  65. $updates[] = $update;
  66. }
  67. }
  68. return [$inserts, $updates];
  69. };
  70. $updater = function ($mod, $updates) {
  71. if (empty($updates)) return;
  72. foreach ($updates as $update) {
  73. $provider_id = $update['provider_id'];
  74. $data = ['qualitys' => $update['qualitys']];
  75. $mod->editProvider($data, ['provider_id' => $provider_id]);
  76. }
  77. };
  78. $inserter = function ($mod, $type, $names) {
  79. foreach ($names as $name) {
  80. $data = ['name' => $name['name'], 'type' => $type, 'store_id' => $name['store_id'], 'qualitys' => $name['qualitys'], 'opened' => 2];
  81. $mod->insert($data);
  82. }
  83. };
  84. global $config;
  85. $oil_configs = $config['oil_providers'];
  86. $pho_configs = $config['phone_providers'];
  87. $third_configs = $config['third_providers'];
  88. $oils = $name_val($oil_configs);
  89. $phones = $name_val($pho_configs);
  90. $third = $name_val($third_configs);
  91. $mod_prov = Model('refill_provider');
  92. $oil_items = $mod_prov->getProviderList(['type' => 1]);
  93. $oil_items = $name_val($oil_items);
  94. [$oil_inserts, $oil_updates] = $match($oils, $oil_items);
  95. $phone_items = $mod_prov->getProviderList(['type' => 2]);
  96. $phone_items = $name_val($phone_items);
  97. [$phone_inserts, $phone_updates] = $match($phones, $phone_items);
  98. $third_items = $mod_prov->getProviderList(['type' => 3]);
  99. $third_items = $name_val($third_items);
  100. [$third_inserts, $third_updates] = $match($third, $third_items);
  101. $inserter($mod_prov, 1, $oil_inserts);
  102. $inserter($mod_prov, 2, $phone_inserts);
  103. $inserter($mod_prov, 3, $third_inserts);
  104. $updater($mod_prov, $oil_updates);
  105. $updater($mod_prov, $phone_updates);
  106. $updater($mod_prov, $third_updates);
  107. }
  108. }