Promotion.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace app\model\system;
  11. use app\model\BaseModel;
  12. use app\model\system\Config as ConfigModel;
  13. /**
  14. * 活动整体管理
  15. */
  16. class Promotion extends BaseModel
  17. {
  18. /**
  19. * 获取营销活动展示
  20. */
  21. public function getPromotions()
  22. {
  23. $show = event("ShowPromotion", []);
  24. $shop_promotion = [];
  25. foreach ($show as $k => $v) {
  26. if (!empty($v[ 'shop' ])) {
  27. $shop_promotion = array_merge($shop_promotion, $v[ 'shop' ]);
  28. }
  29. }
  30. return [
  31. 'shop' => $shop_promotion
  32. ];
  33. }
  34. /**
  35. * 获取站点营销活动展示
  36. * @param $site_id
  37. */
  38. public function getSitePromotions($site_id)
  39. {
  40. $show = event("ShowPromotion", []);
  41. $promotion = [];
  42. foreach ($show as $k => $v) {
  43. if (!empty($v[ 'shop' ])) {
  44. $promotion = array_merge($promotion, $v[ 'shop' ]);
  45. }
  46. }
  47. return $promotion;
  48. }
  49. /**
  50. * 获取营销类型
  51. */
  52. public function getPromotionType()
  53. {
  54. $promotion_type = event("PromotionType");
  55. $promotion_type[] = [ "type" => "empty", "name" => "无营销活动" ];
  56. return $promotion_type;
  57. }
  58. /**
  59. * 获取营销活动总数
  60. */
  61. public function getPromotionCount($site_id)
  62. {
  63. $show = event("ShowPromotion", [ 'count' => 1, 'site_id' => $site_id ]);
  64. $count = 0;
  65. foreach ($show as $k => $v) {
  66. if (!empty($v[ 'shop' ])) {
  67. $summary = $v[ 'shop' ][ 'summary' ] ?? [];
  68. if (!empty($summary)) {
  69. $count += $summary[ 'count' ];
  70. }
  71. }
  72. if (!empty($v[ 'member' ])) {
  73. $summary = $v[ 'member' ][ 'summary' ] ?? [];
  74. if (!empty($summary)) {
  75. $count += $summary[ 'count' ];
  76. }
  77. }
  78. }
  79. return $count;
  80. }
  81. /**
  82. * 输入时间查看活动营销概况
  83. * @param $start_time
  84. * @param $end_time
  85. */
  86. public function getPromotionSummary($start_time, $end_time, $site_id)
  87. {
  88. $summary = event("ShowPromotion", [ 'summary' => 1, 'start_time' => $start_time, 'end_time' => $end_time, 'site_id' => $site_id ]);
  89. $promotion = [
  90. 'time_limit' => [], // 限时类活动
  91. 'unlimited_time' => [], // 不限时类的活动
  92. 'promotion_num' => 0, // 活动数量
  93. 'in_progress_num' => 0 // 进行中活动数量
  94. ];
  95. foreach ($summary as $k => $v) {
  96. $shop = $v[ 'shop' ][ 0 ] ?? [];
  97. if (empty($shop)) continue;
  98. $promotion[ 'promotion_num' ] += 1;
  99. $summary_v = $shop[ 'summary' ] ?? [];
  100. if (isset($summary_v[ 'time_limit' ])) {
  101. unset($shop[ 'summary' ]);
  102. array_push($promotion[ 'time_limit' ], array_merge($shop, $summary_v[ 'time_limit' ]));
  103. $promotion[ 'in_progress_num' ] += $summary_v[ 'time_limit' ][ 'count' ];
  104. }
  105. if (isset($summary_v[ 'unlimited_time' ])) {
  106. unset($shop[ 'summary' ]);
  107. array_push($promotion[ 'unlimited_time' ], array_merge($shop, $summary_v[ 'unlimited_time' ]));
  108. // if ($summary_v['unlimited_time']['status']) $promotion['in_progress_num'] += 1;
  109. }
  110. }
  111. return $this->success($promotion);
  112. }
  113. /**
  114. * 设置活动专区页面配置
  115. * @param $data
  116. * @param $site_id
  117. * @param $app_module
  118. * @return array
  119. */
  120. public function setPromotionZoneConfig($data, $site_id, $app_module = 'shop')
  121. {
  122. $config = new ConfigModel();
  123. $config_key = strtoupper($data[ 'name' ]) . '_ZONE_CONFIG';
  124. $res = $config->setConfig($data, $data[ 'title' ] . '活动专区页面配置', 1, [ [ 'site_id', '=', $site_id ], [ 'app_module', '=', $app_module ], [ 'config_key', '=', $config_key ] ]);
  125. return $res;
  126. }
  127. /**
  128. * 获取活动专区页面配置
  129. * @param $name
  130. * @param $config_key
  131. * @param $site_id
  132. * @param $app_module
  133. * @return array
  134. */
  135. public function getPromotionZoneConfig($name, $site_id, $app_module = 'shop')
  136. {
  137. $config = new ConfigModel();
  138. $config_key = strtoupper($name) . '_ZONE_CONFIG';
  139. $res = $config->getConfig([ [ 'site_id', '=', $site_id ], [ 'app_module', '=', $app_module ], [ 'config_key', '=', $config_key ] ]);
  140. if (empty($res[ 'data' ][ 'value' ])) {
  141. $promotion_zone_config = event('PromotionZoneConfig', [ 'name' => $name ], true);
  142. $res[ 'data' ][ 'value' ] = $promotion_zone_config[ 'value' ];
  143. }
  144. return $res;
  145. }
  146. }