Blindbox.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\blindbox\shop\controller;
  11. use addon\blindbox\model\BlindboxGoods as BlindboxGoodsModel;
  12. use app\shop\controller\BaseShop;
  13. use addon\blindbox\model\BlindboxCategory as BlindboxCategoryModel;
  14. use addon\blindbox\model\Blindbox as BlindboxModel;
  15. class Blindbox extends BaseShop
  16. {
  17. /**
  18. * 盲盒列表
  19. * @return mixed|string
  20. */
  21. public function lists()
  22. {
  23. $blindbox_model = new BlindboxModel();
  24. //获取续签信息
  25. if (request()->isAjax()) {
  26. $page = input('page', 1);
  27. $page_size = input('page_size', PAGE_LIST_ROWS);
  28. $name = input('blindbox_name', '');
  29. $blindbox_status = input('blindbox_status', '');
  30. $category_id = input('category_id', '');
  31. $start_time = input('start_time', '');
  32. $end_time = input('end_time', '');
  33. $condition = [];
  34. if ($blindbox_status !== "") {
  35. $condition[] = [ 'a.blindbox_status', '=', $blindbox_status ];
  36. }
  37. if ($category_id) {
  38. $condition[] = [ 'a.category_id', '=', $category_id ];
  39. }
  40. if (!empty($start_time) && empty($end_time)) {
  41. $condition[] = [ "a.start_time", ">=", date_to_time($start_time) ];
  42. } elseif (empty($start_time) && !empty($end_time)) {
  43. $condition[] = [ "a.end_time", "<=", date_to_time($end_time) + 86399 ];
  44. } elseif (!empty($start_time) && !empty($end_time)) {
  45. $condition[] = [ "a.start_time", ">=", date_to_time($start_time) ];
  46. $condition[] = [ "a.end_time", "<=", date_to_time($end_time) + 86399 ];
  47. }
  48. $condition[] = [ 'a.site_id', '=', $this->site_id ];
  49. $condition[] = [ 'a.blindbox_name', 'like', '%' . $name . '%' ];
  50. $field = 'a.*,bc.category_name';
  51. $alias = 'a';
  52. $join = [
  53. [ 'blindbox_category bc', 'bc.category_id = a.category_id', 'left' ]
  54. ];
  55. //排序
  56. $order = input('order', 'create_time');
  57. $sort = input('sort', 'desc');
  58. if (!empty($sort)) {
  59. $order_by = 'a.' . $order . ' ' . $sort;
  60. } else {
  61. $order_by = 'a.create_time desc';
  62. }
  63. $data = $blindbox_model->getBlindboxPageList($condition, intval($page), $page_size, $order_by, $field, $alias, $join);
  64. return $data;
  65. } else {
  66. $this->forthMenu();
  67. $blindbox_status = $blindbox_model->getBlindboxStatus();
  68. $this->assign('blindbox_status', $blindbox_status[ 'data' ]);
  69. $category_model = new BlindboxCategoryModel();
  70. $category_data = $category_model->getBlindboxCategoryList([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 1 ] ], 'category_id,category_name')[ 'data' ] ?? [];
  71. if ($category_data) {
  72. $category_data = array_column($category_data, 'category_name', 'category_id');
  73. }
  74. $this->assign('category_data', $category_data);
  75. return $this->fetch("blindbox/lists");
  76. }
  77. }
  78. /**
  79. * 修改排序
  80. */
  81. public function blindboxSort()
  82. {
  83. $sort = input('sort', 0);
  84. $blindbox_id = input('blindbox_id', 0);
  85. $member_label_model = new BlindboxModel();
  86. return $member_label_model->blindboxSort($sort, $blindbox_id);
  87. }
  88. /**
  89. * 添加
  90. * @return array|mixed
  91. */
  92. public function add()
  93. {
  94. //获取续签信息
  95. if (request()->isAjax()) {
  96. $goods = input('goods', '');
  97. $goods_ids = array_column($goods, 'sku_id');
  98. $goods_count = array_column($goods, 'num');
  99. $blindbox_count = array_sum($goods_count);
  100. $data = [
  101. 'blindbox_name' => input('blindbox_name', ''), #盲盒名称
  102. 'blindbox_images' => input('blindbox_images', ''),#盲盒封面
  103. 'blindbox_count' => $blindbox_count,#放置总量
  104. 'blindbox_inventory' => $blindbox_count,#盲盒库存
  105. 'start_time' => strtotime(input('start_time', 0)),#活动开启时间
  106. 'end_time' => strtotime(input('end_time', 0)),#活动结束时间
  107. 'category_id' => input('category_id', 0),#盲盒分类
  108. 'early_inventory' => input('early_inventory', 0),#库存预警
  109. 'sort' => input('sort', 0),#排序
  110. 'price' => input('price', ''),#拆盒价
  111. 'new_price' => ( input('new_price', 0) > 0 ) ? input('new_price', '') : input('price', ''),#新人拆盒价
  112. 'is_emptybox' => input('is_emptybox', 1),#空盒是否显示1显示 2不显示
  113. 'is_balance' => input('is_balance', 0),#是否用余额支付
  114. 'remark' => input('remark', ''),#说明
  115. 'goods_ids' => implode(',', $goods_ids),#盲盒内所有的商品规格Id
  116. 'goods' => $goods,
  117. 'site_id' => $this->site_id,
  118. 'create_time' => time(),
  119. ];
  120. $blindbox_model = new BlindboxModel();
  121. $res = $blindbox_model->addBlindbox($data);
  122. return $res;
  123. } else {
  124. $category_model = new BlindboxCategoryModel();
  125. $category_data = $category_model->getBlindboxCategoryList([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 1 ] ], 'category_id,category_name')[ 'data' ] ?? [];
  126. if ($category_data) {
  127. $category_data = array_column($category_data, 'category_name', 'category_id');
  128. }
  129. $this->assign('category_data', $category_data);
  130. return $this->fetch("blindbox/add");
  131. }
  132. }
  133. /**
  134. * 编辑
  135. * @return array|mixed
  136. */
  137. public function edit()
  138. {
  139. $blindbox_id = input('blindbox_id', 0);
  140. $blindbox_model = new BlindboxModel();
  141. if (request()->isAjax()) {
  142. $input = input();
  143. $data = [];
  144. $data[ 'site_id' ] = $this->site_id;
  145. if (isset($input[ 'blindbox_id' ])) $data[ 'blindbox_id' ] = $input[ 'blindbox_id' ];
  146. if (isset($input[ 'price' ])) $data[ 'price' ] = $input[ 'price' ];
  147. if (isset($input[ 'blindbox_name' ])) $data[ 'blindbox_name' ] = $input[ 'blindbox_name' ];
  148. if (isset($input[ 'blindbox_images' ])) $data[ 'blindbox_images' ] = $input[ 'blindbox_images' ];
  149. if (isset($input[ 'start_time' ])) $data[ 'start_time' ] = $input[ 'start_time' ] ? strtotime($input[ 'start_time' ]) : 0;
  150. if (isset($input[ 'end_time' ])) $data[ 'end_time' ] = $input[ 'end_time' ] ? strtotime($input[ 'end_time' ]) : 0;
  151. if (isset($input[ 'category_id' ])) $data[ 'category_id' ] = $input[ 'category_id' ];
  152. if (isset($input[ 'sort' ])) $data[ 'sort' ] = $input[ 'sort' ];
  153. if (isset($input[ 'early_inventory' ])) $data[ 'early_inventory' ] = $input[ 'early_inventory' ];
  154. if (isset($input[ 'price' ])) $data[ 'price' ] = $input[ 'price' ];
  155. if (isset($input[ 'new_price' ])) $data[ 'new_price' ] = ( $input[ 'new_price' ] > 0 ) ? $input[ 'new_price' ] : $input[ 'price' ];
  156. if (isset($input[ 'is_emptybox' ])) $data[ 'is_emptybox' ] = $input[ 'is_emptybox' ];
  157. if (isset($input[ 'is_balance' ])) $data[ 'is_balance' ] = $input[ 'is_balance' ];
  158. if (isset($input[ 'remark' ])) $data[ 'remark' ] = $input[ 'remark' ];
  159. if (isset($input[ 'goods' ])) {
  160. $goods = input('goods', '');
  161. $goods_ids = array_column($goods, 'sku_id');
  162. $goods_count = array_column($goods, 'num');
  163. $blindbox_count = array_sum($goods_count);
  164. $data[ 'blindbox_count' ] = $blindbox_count;#放置总量
  165. $data[ 'blindbox_inventory' ] = $blindbox_count;#盲盒库存
  166. $data[ 'goods_ids' ] = implode(',', $goods_ids);#盲盒内所有的商品规格Id
  167. $data[ 'goods' ] = $goods;
  168. }
  169. $res = $blindbox_model->editBlindbox($data);
  170. return $res;
  171. } else {
  172. $condition = [
  173. [ 'blindbox_id', '=', $blindbox_id ],
  174. ];
  175. $field = 'a.*,bc.category_name';
  176. $alias = 'a';
  177. $join = [
  178. [ 'blindbox_category bc', 'bc.category_id = a.category_id', 'left' ]
  179. ];
  180. $blindbox_info = $blindbox_model->getBlindboxInfo($condition, $field, $alias, $join)[ 'data' ] ?? [];
  181. $goods_model = new BlindboxGoodsModel();
  182. $goods_list = $goods_model->getBlindboxGoodsList([ [ 'a.site_id', '=', $this->site_id ], [ 'a.blindbox_id', '=', $blindbox_id ] ])[ 'data' ] ?? [];
  183. $checked_goods = [];
  184. if ($goods_list) {
  185. foreach ($goods_list as $k => $v) {
  186. $v[ 'num' ] = 1;
  187. unset($v[ 'id' ]);
  188. if (!isset($checked_goods[ $v[ 'sku_id' ] ])) {
  189. $checked_goods[ $v[ 'sku_id' ] ] = $v;
  190. } else {
  191. $checked_goods[ $v[ 'sku_id' ] ][ 'num' ] += $v[ 'num' ] ?? 0;
  192. }
  193. }
  194. }
  195. $blindbox_info[ 'goods_list' ] = $checked_goods;
  196. $blindbox_info[ 'goods_list_count' ] = count($checked_goods);
  197. $this->assign('blindbox_info', $blindbox_info);
  198. $category_model = new BlindboxCategoryModel();
  199. $category_data = $category_model->getBlindboxCategoryList([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 1 ] ], 'category_id,category_name')[ 'data' ] ?? [];
  200. if ($category_data) {
  201. $category_data = array_column($category_data, 'category_name', 'category_id');
  202. }
  203. $this->assign('category_data', $category_data);
  204. return $this->fetch("blindbox/edit");
  205. }
  206. }
  207. /**
  208. * 删除盲盒
  209. * @return array
  210. */
  211. public function del()
  212. {
  213. if (request()->isAjax()) {
  214. $blindbox_id = input('blindbox_id', 0);
  215. $data = [
  216. 'blindbox_id' => $blindbox_id,
  217. 'site_id' => $this->site_id,
  218. ];
  219. $blindbox_model = new BlindboxModel();
  220. return $blindbox_model->deleteBlindbox($data);
  221. }
  222. }
  223. /**
  224. * 关闭盲盒
  225. * @return mixed
  226. */
  227. public function close()
  228. {
  229. if (request()->isAjax()) {
  230. $blindbox_id = input('blindbox_id', 0);
  231. $data = [
  232. 'blindbox_id' => $blindbox_id,
  233. 'site_id' => $this->site_id,
  234. ];
  235. $blindbox_model = new BlindboxModel();
  236. return $blindbox_model->closeBlindbox($data);
  237. }
  238. }
  239. /**
  240. * 盲盒详情
  241. * @return array|mixed
  242. */
  243. public function detail()
  244. {
  245. $blindbox_id = input('blindbox_id', 0);
  246. $blindbox_model = new BlindboxModel();
  247. $condition = [
  248. [ 'blindbox_id', '=', $blindbox_id ],
  249. ];
  250. $field = 'a.*,bc.category_name';
  251. $alias = 'a';
  252. $join = [
  253. [ 'blindbox_category bc', 'bc.category_id = a.category_id', 'left' ]
  254. ];
  255. $blindbox_info = $blindbox_model->getBlindboxInfo($condition, $field, $alias, $join)[ 'data' ] ?? [];
  256. if (empty($blindbox_info)) {
  257. $this->error('未获取到盲盒信息', addon_url('blindbox/shop/blindbox/lists'));
  258. }
  259. $category_model = new BlindboxCategoryModel();
  260. $category_data = $category_model->getBlindboxCategoryList([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 1 ] ], 'category_id,category_name')[ 'data' ] ?? [];
  261. if ($category_data) {
  262. $category_data = array_column($category_data, 'category_name', 'category_id');
  263. }
  264. $this->assign('category_data', $category_data);
  265. $this->assign('blindbox_info', $blindbox_info);
  266. return $this->fetch("blindbox/detail");
  267. }
  268. /**
  269. * 活动推广
  270. */
  271. public function spreadBlindbox()
  272. {
  273. $blindbox_id = input('blindbox_id', 0);
  274. $blindbox_model = new BlindboxModel();
  275. $res = $blindbox_model->urlQrcode('/pages_promotion/blindbox/index', [ 'blindbox_id' => $blindbox_id ], 'blindbox', $this->site_id);
  276. return $res;
  277. }
  278. }