admin/addon/blindbox/api/controller/Blindbox.php

147 lines
5.4 KiB
PHP

<?php
/**
* ThinkShop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 成都云之牛科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.cdcloudshop.com
* =========================================================
*/
namespace addon\blindbox\api\controller;
use app\api\controller\BaseApi;
use addon\blindbox\model\Blindbox as BlindboxModel;
use addon\blindbox\model\BlindboxGoods as BlindboxGoodsModel;
use addon\blindbox\model\BlindboxMemberGroup;
/**
* 盲盒
* Class Blindbox
* @package addon\blindbox\api\controller
*/
class Blindbox extends BaseApi
{
/**
* 我的盲盒活动
*/
public function myBlindbox()
{
$token = $this->checkToken();
if ($token['code'] < 0) return $this->response($token);
$page = $this->params['page'] ?? 1;
$page_size = $this->params['page_size'] ?? PAGE_LIST_ROWS;
$status = $this->params['status'] ?? '';
$condition = [
['site_id', '=', $this->site_id]
];
if ($status != '') {
$condition[] = ['blindbox_status', '=', $status];
}
$group_model = new BlindboxMemberGroup();
$blindbox_model = new BlindboxModel();
$data = $group_model->getBlindboxGroupList([['site_id', '=', $this->site_id], ['member_id', '=', $this->member_id]], 'id,blindbox_id')['data'] ?? [];
$blindbox_ids = [];
$temp = [];
if ($data) {
foreach ($data as $k => $v) {
$v['num'] = 1;
if (!isset($temp[$v['blindbox_id']])) {
$temp[$v['blindbox_id']] = $v;
} else {
$temp[$v['blindbox_id']]['num'] += $v['num'] ?? 0;
}
}
$blindbox_ids = array_column($temp, 'blindbox_id');
}
$condition[] = ['blindbox_id', 'in', $blindbox_ids];
$list = $blindbox_model->getBlindboxPageList($condition, $page, $page_size);
if ($list['data']['list']) {
$new_list = [];
foreach ($list['data']['list'] as $key => $val) {
$list['data']['list'][$key]['buy_num'] = $temp[$val['blindbox_id']]['num'];
$new_list[array_keys($blindbox_ids, $val['blindbox_id'])[0]] = $list['data']['list'][$key];
}
ksort($new_list);
$new_list = array_values($new_list);
#重组数组
foreach ($new_list as $k=>$v){
$list['data']['list'][$k] = $v;
}
}
return $this->response($list);
}
/**
* 奖品
*/
public function box()
{
$token = $this->checkToken();
if ($token['code'] < 0) return $this->response($token);
$page = $this->params['page'] ?? 1;
$page_size = $this->params['page_size'] ?? PAGE_LIST_ROWS;
$blindbox_id = $this->params['blindbox_id'] ?? '0';
$diff = $this->params['diff'] ?? 1;
$condition = [
['a.site_id', '=', $this->site_id],
['a.blindbox_id', '=', $blindbox_id],
];
if ($diff == 1) {
$condition[] = ['a.member_id', '=', $this->member_id];
}
$alias = 'a';
$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';
$join = [
['blindbox_goods bg', 'a.blindbox_goods_id = bg.id', 'left'],
['goods_sku gs', 'a.sku_id = gs.sku_id', 'left'],
['member m', 'a.member_id = m.member_id', 'left'],
['blindbox_order bo', 'a.order_id = bo.order_id', 'left'],
['order o', 'a.blindbox_goods_id = o.promotion_id and o.promotion_type = "blindbox" ', 'left'],
];
$group_model = new BlindboxMemberGroup();
$list = $group_model->getBlindboxGroupPageList($condition, $page, $page_size, $order = 'a.id desc', $field, $alias, $join);
return $this->response($list);
}
/**
* 我的盲盒系列详情
*/
public function blindboxInfo()
{
$token = $this->checkToken();
if ($token['code'] < 0) return $this->response($token);
$blindbox_id = $this->params['blindbox_id'] ?? 0;
$condition = [
['site_id', '=', $this->site_id],
['blindbox_id', '=', $blindbox_id]
];
$blindbox_model = new BlindboxModel();
$info = $blindbox_model->getBlindboxInfo($condition);
if ($info['data']) {
$blindbox_goods_model = new BlindboxGoodsModel();
$num = $blindbox_goods_model->getBlindboxGoodsCount([['blindbox_id', '=', $blindbox_id], ['member_id', '=', $this->member_id], ['status', '=', 1]])['data'] ?? 0;
$info['data']['buy_num'] = $num;
}
return $this->response($info);
}
/**
* 发货 sku信息
*/
public function skuInfo()
{
$token = $this->checkToken();
if ($token['code'] < 0) return $this->response($token);
$sku_id = $this->params['sku_id'] ?? 0;
$blindbox_goods_model = new BlindboxGoodsModel();
$info = $blindbox_goods_model->getSkuInfo([['sku_id', '=', $sku_id]], 'sku_id,price,market_price,sku_name,sku_image');
return $this->response($info);
}
}