Blindbox.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\blindbox\api\controller;
  11. use app\api\controller\BaseApi;
  12. use addon\blindbox\model\Blindbox as BlindboxModel;
  13. use addon\blindbox\model\BlindboxGoods as BlindboxGoodsModel;
  14. use addon\blindbox\model\BlindboxMemberGroup;
  15. /**
  16. * 盲盒
  17. * Class Blindbox
  18. * @package addon\blindbox\api\controller
  19. */
  20. class Blindbox extends BaseApi
  21. {
  22. /**
  23. * 我的盲盒活动
  24. */
  25. public function myBlindbox()
  26. {
  27. $token = $this->checkToken();
  28. if ($token[ 'code' ] < 0) return $this->response($token);
  29. $page = $this->params[ 'page' ] ?? 1;
  30. $page_size = $this->params[ 'page_size' ] ?? PAGE_LIST_ROWS;
  31. $status = $this->params[ 'status' ] ?? '';
  32. $condition = [
  33. [ 'site_id', '=', $this->site_id ]
  34. ];
  35. if ($status != '') {
  36. $condition[] = [ 'blindbox_status', '=', $status ];
  37. }
  38. $group_model = new BlindboxMemberGroup();
  39. $blindbox_model = new BlindboxModel();
  40. $data = $group_model->getBlindboxGroupList([ [ 'site_id', '=', $this->site_id ], [ 'member_id', '=', $this->member_id ] ], 'id,blindbox_id')[ 'data' ] ?? [];
  41. $blindbox_ids = [];
  42. $temp = [];
  43. if ($data) {
  44. foreach ($data as $k => $v) {
  45. $v[ 'num' ] = 1;
  46. if (!isset($temp[ $v[ 'blindbox_id' ] ])) {
  47. $temp[ $v[ 'blindbox_id' ] ] = $v;
  48. } else {
  49. $temp[ $v[ 'blindbox_id' ] ][ 'num' ] += $v[ 'num' ] ?? 0;
  50. }
  51. }
  52. $blindbox_ids = array_column($temp, 'blindbox_id');
  53. }
  54. $condition[] = [ 'blindbox_id', 'in', $blindbox_ids ];
  55. $list = $blindbox_model->getBlindboxPageList($condition, $page, $page_size);
  56. if ($list[ 'data' ][ 'list' ]) {
  57. $new_list = [];
  58. foreach ($list[ 'data' ][ 'list' ] as $key => $val) {
  59. $list[ 'data' ][ 'list' ][ $key ][ 'buy_num' ] = $temp[ $val[ 'blindbox_id' ] ][ 'num' ];
  60. $new_list[ array_keys($blindbox_ids, $val[ 'blindbox_id' ])[ 0 ] ] = $list[ 'data' ][ 'list' ][ $key ];
  61. }
  62. ksort($new_list);
  63. $new_list = array_values($new_list);
  64. // 重组数组
  65. foreach ($new_list as $k => $v) {
  66. $list[ 'data' ][ 'list' ][ $k ] = $v;
  67. }
  68. }
  69. return $this->response($list);
  70. }
  71. /**
  72. * 奖品
  73. */
  74. public function box()
  75. {
  76. $token = $this->checkToken();
  77. if ($token[ 'code' ] < 0) return $this->response($token);
  78. $page = $this->params[ 'page' ] ?? 1;
  79. $page_size = $this->params[ 'page_size' ] ?? PAGE_LIST_ROWS;
  80. $blindbox_id = $this->params[ 'blindbox_id' ] ?? '0';
  81. $diff = $this->params[ 'diff' ] ?? 1;
  82. $condition = [
  83. [ 'a.site_id', '=', $this->site_id ],
  84. [ 'a.blindbox_id', '=', $blindbox_id ],
  85. ];
  86. if ($diff == 1) {
  87. $condition[] = [ 'a.member_id', '=', $this->member_id ];
  88. }
  89. $alias = 'a';
  90. $field = 'a.id,a.blindbox_id,a.blindbox_goods_id,a.create_time,gs.goods_class,gs.sku_name,gs.sku_image,m.username,m.nickname,m.headimg,bo.is_dispatch,bo.out_trade_no,o.order_id,gs.sku_id';
  91. $join = [
  92. [ 'blindbox_goods bg', 'a.blindbox_goods_id = bg.id', 'left' ],
  93. [ 'goods_sku gs', 'a.sku_id = gs.sku_id', 'left' ],
  94. [ 'member m', 'a.member_id = m.member_id', 'left' ],
  95. [ 'blindbox_order bo', 'a.order_id = bo.order_id', 'left' ],
  96. [ 'order o', 'a.blindbox_goods_id = o.promotion_id and o.promotion_type = "blindbox" ', 'left' ],
  97. ];
  98. $group_model = new BlindboxMemberGroup();
  99. $list = $group_model->getBlindboxGroupPageList($condition, $page, $page_size, $order = 'a.id desc', $field, $alias, $join);
  100. return $this->response($list);
  101. }
  102. /**
  103. * 我的盲盒系列详情
  104. */
  105. public function blindboxInfo()
  106. {
  107. $token = $this->checkToken();
  108. if ($token[ 'code' ] < 0) return $this->response($token);
  109. $blindbox_id = $this->params[ 'blindbox_id' ] ?? 0;
  110. $condition = [
  111. [ 'site_id', '=', $this->site_id ],
  112. [ 'blindbox_id', '=', $blindbox_id ]
  113. ];
  114. $blindbox_model = new BlindboxModel();
  115. $info = $blindbox_model->getBlindboxInfo($condition);
  116. if ($info[ 'data' ]) {
  117. $blindbox_goods_model = new BlindboxGoodsModel();
  118. $num = $blindbox_goods_model->getBlindboxGoodsCount([ [ 'blindbox_id', '=', $blindbox_id ], [ 'member_id', '=', $this->member_id ], [ 'status', '=', 1 ] ])[ 'data' ] ?? 0;
  119. $info[ 'data' ][ 'buy_num' ] = $num;
  120. }
  121. return $this->response($info);
  122. }
  123. /**
  124. * 发货 sku信息
  125. */
  126. public function skuInfo()
  127. {
  128. $token = $this->checkToken();
  129. if ($token[ 'code' ] < 0) return $this->response($token);
  130. $sku_id = $this->params[ 'sku_id' ] ?? 0;
  131. $blindbox_goods_model = new BlindboxGoodsModel();
  132. $info = $blindbox_goods_model->getSkuInfo([ [ 'sku_id', '=', $sku_id ] ], 'sku_id,price,market_price,sku_name,sku_image');
  133. return $this->response($info);
  134. }
  135. }