bundling.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 16/8/16
  6. * Time: 上午11:15
  7. */
  8. namespace activity;
  9. use algorithm;
  10. use Log;
  11. use StatesHelper;
  12. class bundling
  13. {
  14. const STATE_OPEN = 1; // 开启
  15. const STATE_CLOSE = 0; // 关闭
  16. const STORE_ID = 6;
  17. const cache_name = 'all_bundling';
  18. static private $stInstance = null;
  19. private $bundling_list;
  20. private $bundling_goods;
  21. private $goods_ids;
  22. private function __construct()
  23. {
  24. }
  25. static public function instance()
  26. {
  27. if(self::$stInstance == null) {
  28. self::$stInstance = new bundling();
  29. }
  30. if(StatesHelper::fetch_state('bundling')) {
  31. Log::record("bundling reinit data.",Log::DEBUG);
  32. self::$stInstance->init();
  33. }
  34. return self::$stInstance;
  35. }
  36. private function init()
  37. {
  38. $data = $this->read_cache();
  39. $this->bundling_list = $data['list'];
  40. $this->bundling_goods = $data['goods'];
  41. $this->goods_ids = $data['ids'];
  42. }
  43. private function read_cache()
  44. {
  45. $prefix = 'mb_activity';
  46. $items = rcache(self::cache_name, $prefix);
  47. if (!empty($items)) {
  48. return unserialize($items['data']);
  49. }
  50. $bundling_list = [];
  51. $bundling_goods = [];
  52. $goods_ids = [];
  53. $mod = Model('p_bundling');
  54. $list = $mod->getBundlingList(array('bl_state' => self::STATE_OPEN));
  55. foreach ($list as $val)
  56. {
  57. $bl_id = intval($val['bl_id']);
  58. $bundling_list[$bl_id] = $val;
  59. $bundling_goods[$bl_id] = [];
  60. $bgoods = $mod->getBundlingGoodsList(array('bl_id' => $bl_id, 'bl_appoint' => 1), 'goods_id,bl_goods_price');
  61. foreach ($bgoods as $goods) {
  62. $goods_id =intval($goods['goods_id']);
  63. array_push($bundling_goods[$bl_id],$goods);
  64. $goods_ids[$goods_id][] = $bl_id;
  65. }
  66. }
  67. $data = array('list' => $bundling_list,'goods' => $bundling_goods, 'ids' => $goods_ids);
  68. wcache(self::cache_name, array('data' => serialize($data)), $prefix);
  69. return $data;
  70. }
  71. public function have_bundling($goods_id)
  72. {
  73. $goods_id = intval($goods_id);
  74. if(isset($this->goods_ids[$goods_id])) {
  75. return $this->goods_ids[$goods_id];
  76. }
  77. return false;
  78. }
  79. private function format($act_id,&$goods_ids)
  80. {
  81. $val = $this->bundling_list[$act_id];
  82. $ret['bl_id'] = intval($val['bl_id']);
  83. $ret['bl_name'] = $val['bl_name'];
  84. $ret['bl_price'] = doubleval($val['bl_discount_price']);
  85. $goods_ids = [];
  86. $bl_goods = $this->bundling_goods[$act_id];
  87. foreach ($bl_goods as $goods)
  88. {
  89. $goods_id = intval($goods['goods_id']);
  90. $item['goods_id'] = $goods_id;
  91. $item['bl_goods_price'] = doubleval($goods['bl_goods_price']);
  92. if(algorithm::binary_search($goods_ids,$goods_id) == false) {
  93. $pos = algorithm::lower_bonud($goods_ids,$goods_id);
  94. algorithm::array_insert($goods_ids,$pos,$goods_id);
  95. }
  96. $ret['goods'][] = $item;
  97. }
  98. return $ret;
  99. }
  100. public function get_info($act_id,&$goods_ids)
  101. {
  102. $bl_id = intval($act_id);
  103. if(isset($this->bundling_list[$bl_id]) && isset($this->bundling_goods[$bl_id])) {
  104. return $this->format($bl_id,$goods_ids);
  105. }
  106. else {
  107. return false;
  108. }
  109. }
  110. public function bundling_goods($bl_id)
  111. {
  112. $bl_id = intval($bl_id);
  113. if(isset($this->bundling_list[$bl_id]) && isset($this->bundling_goods[$bl_id]))
  114. {
  115. $goods_ids = array();
  116. $bl_goods = $this->bundling_goods[$bl_id];
  117. foreach ($bl_goods as $goods) {
  118. $goods_ids[] = intval($goods['goods_id']);
  119. }
  120. return $goods_ids;
  121. }
  122. else {
  123. return false;
  124. }
  125. }
  126. }