chprice_helper.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. namespace refill;
  3. use mtopcard;
  4. use trans_wapper;
  5. use Exception;
  6. use Log;
  7. class chprice_helper
  8. {
  9. public function update_from_file()
  10. {
  11. include(BASE_CONFIG_PATH . CONFIG_PREFIX . '/refill.ini.php');
  12. global $config;
  13. $oils = $config['oil_providers'];
  14. $phones = $config['phone_providers'];
  15. $this->update_db($oils,mtopcard\OilCardPaper);
  16. $this->update_db($phones,mtopcard\PhoneCardPaper);
  17. }
  18. private function update_db($providers,$type)
  19. {
  20. $updater = function($name,$cfg,$type)
  21. {
  22. $json_cfg = json_encode($cfg);
  23. $file_hash = md5($json_cfg);
  24. $mod_price = Model('provider_price');
  25. $store_id = intval($cfg['store_id']);
  26. $item = $mod_price->getPirce(['provider_name' => $name,'product_type' => $type]);
  27. if(empty($item)) {
  28. $ret = $mod_price->insert(['product_type' => $type, 'provider_name' => $name, 'store_id' => $store_id,
  29. 'cfg' => $json_cfg, 'cfg_hash' => $file_hash, 'operator' => 'system', 'update_time' => time()]);
  30. }
  31. elseif($item['cfg_hash'] != $file_hash)
  32. {
  33. try
  34. {
  35. $tran = new trans_wapper($mod_price,'notify change order state trans');
  36. $item = $mod_price->getPirce(['provider_name' => $name,'product_type' => $type],'*',true,true);
  37. $effect_time = intval($item['effect_time']);
  38. if($effect_time > 0)
  39. {
  40. $ret = $mod_price->where(['price_id' => $item['price_id']])
  41. ->update(['new_cfg' => $json_cfg, 'cfg_hash' => $file_hash, 'operator' => 'system', 'update_time' => time()]);
  42. }
  43. else
  44. {
  45. $ret = $mod_price->where(['price_id' => $item['price_id']])
  46. ->update(['cfg' => $json_cfg, 'cfg_hash' => $file_hash, 'operator' => 'system', 'update_time' => time()]);
  47. }
  48. $tran->commit();
  49. }
  50. catch (Exception $ex)
  51. {
  52. $tran->rollback();
  53. Log::record($ex->getMessage(),Log::ERR);
  54. }
  55. }
  56. else {
  57. $ret = true;
  58. }
  59. return $ret;
  60. };
  61. foreach ($providers as $provider) {
  62. $name = $provider['name'];
  63. $cfg = $provider['cfg'];
  64. if(!empty($cfg)) {
  65. $updater($name,$cfg,$type);
  66. }
  67. }
  68. }
  69. public function update($price_id,$cfgs,$effect_time,$operator='system')
  70. {
  71. try
  72. {
  73. $json_cfg = json_encode($cfgs);
  74. $mod_price = Model('provider_price');
  75. $tran = new trans_wapper($mod_price,'notify change order state trans');
  76. $item = $mod_price->getPirce(['price_id' => $price_id], '*', true, true);
  77. if ($effect_time > 0) {
  78. $ret = $mod_price->where(['price_id' => $item['price_id']])
  79. ->update(['new_cfg' => $json_cfg, 'operator' => $operator, 'effect_time' => $effect_time, 'update_time' => time()]);
  80. } else {
  81. $ret = $mod_price->where(['price_id' => $item['price_id']])
  82. ->update(['cfg' => $json_cfg, 'new_cfg' => '', 'effect_time' => 0, 'operator' => $operator, 'update_time' => time()]);
  83. }
  84. $tran->commit();
  85. }
  86. catch (Exception $ex)
  87. {
  88. $tran->rollback();
  89. Log::record($ex->getMessage(),Log::ERR);
  90. }
  91. return $ret;
  92. }
  93. public function effect($price_id)
  94. {
  95. try
  96. {
  97. $mod_price = Model('provider_price');
  98. $tran = new trans_wapper($mod_price,'notify change order state trans');
  99. $item = $mod_price->getPirce(['price_id' => $price_id], '*', true, true);
  100. $effect_time = intval($item['effect_time']);
  101. if ($effect_time > 0) {
  102. $ret = $mod_price->where(['price_id' => $item['price_id']])
  103. ->update(['cfg' => ['exp', 'new_cfg'], 'new_cfg' => '', 'effect_time' => 0]);
  104. }
  105. $tran->commit();
  106. }
  107. catch (Exception $ex)
  108. {
  109. $tran->rollback();
  110. Log::record($ex->getMessage(),Log::ERR);
  111. }
  112. return $ret;
  113. }
  114. private function load_type($type)
  115. {
  116. $mod_price = Model('provider_price');
  117. $items = $mod_price->getPirces(['product_type' => $type,'opened' => 1],'provider_name,cfg');
  118. $result = [];
  119. foreach ($items as $item) {
  120. $result[] = ['name' => $item['provider_name'],'cfg' => json_decode($item['cfg'],true)];
  121. }
  122. return $result;
  123. }
  124. public function load_from_db()
  125. {
  126. global $config;
  127. $config['oil_providers'] = $this->load_type(mtopcard\OilCardPaper);
  128. $config['phone_providers'] = $this->load_type(mtopcard\PhoneCardPaper);
  129. }
  130. }