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

301 lines
13 KiB
PHP

<?php
/**
* ThinkShop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 成都云之牛科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.cdcloudshop.com
* =========================================================
*/
namespace addon\blindbox\shop\controller;
use addon\blindbox\model\BlindboxGoods as BlindboxGoodsModel;
use app\shop\controller\BaseShop;
use addon\blindbox\model\BlindboxCategory as BlindboxCategoryModel;
use addon\blindbox\model\Blindbox as BlindboxModel;
class Blindbox extends BaseShop
{
/**
* 盲盒列表
* @return mixed|string
*/
public function lists()
{
$blindbox_model = new BlindboxModel();
//获取续签信息
if (request()->isAjax()) {
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$name = input('blindbox_name', '');
$blindbox_status = input('blindbox_status', '');
$category_id = input('category_id', '');
$start_time = input('start_time', '');
$end_time = input('end_time', '');
$condition = [];
if ($blindbox_status !== "") {
$condition[] = [ 'a.blindbox_status', '=', $blindbox_status ];
}
if ($category_id) {
$condition[] = [ 'a.category_id', '=', $category_id ];
}
if (!empty($start_time) && empty($end_time)) {
$condition[] = [ "a.start_time", ">=", date_to_time($start_time) ];
} elseif (empty($start_time) && !empty($end_time)) {
$condition[] = [ "a.end_time", "<=", date_to_time($end_time) + 86399 ];
} elseif (!empty($start_time) && !empty($end_time)) {
$condition[] = [ "a.start_time", ">=", date_to_time($start_time) ];
$condition[] = [ "a.end_time", "<=", date_to_time($end_time) + 86399 ];
}
$condition[] = [ 'a.site_id', '=', $this->site_id ];
$condition[] = [ 'a.blindbox_name', 'like', '%' . $name . '%' ];
$field = 'a.*,bc.category_name';
$alias = 'a';
$join = [
[ 'blindbox_category bc', 'bc.category_id = a.category_id', 'left' ]
];
//排序
$order = input('order', 'create_time');
$sort = input('sort', 'desc');
if (!empty($sort)) {
$order_by = 'a.' . $order . ' ' . $sort;
} else {
$order_by = 'a.create_time desc';
}
$data = $blindbox_model->getBlindboxPageList($condition, intval($page), $page_size, $order_by, $field, $alias, $join);
return $data;
} else {
$this->forthMenu();
$blindbox_status = $blindbox_model->getBlindboxStatus();
$this->assign('blindbox_status', $blindbox_status[ 'data' ]);
$category_model = new BlindboxCategoryModel();
$category_data = $category_model->getBlindboxCategoryList([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 1 ] ], 'category_id,category_name')[ 'data' ] ?? [];
if ($category_data) {
$category_data = array_column($category_data, 'category_name', 'category_id');
}
$this->assign('category_data', $category_data);
return $this->fetch("blindbox/lists");
}
}
/**
* 修改排序
*/
public function blindboxSort()
{
$sort = input('sort', 0);
$blindbox_id = input('blindbox_id', 0);
$member_label_model = new BlindboxModel();
return $member_label_model->blindboxSort($sort, $blindbox_id);
}
/**
* 添加
* @return array|mixed
*/
public function add()
{
//获取续签信息
if (request()->isAjax()) {
$goods = input('goods', '');
$goods_ids = array_column($goods, 'sku_id');
$goods_count = array_column($goods, 'num');
$blindbox_count = array_sum($goods_count);
$data = [
'blindbox_name' => input('blindbox_name', ''), #盲盒名称
'blindbox_images' => input('blindbox_images', ''),#盲盒封面
'blindbox_count' => $blindbox_count,#放置总量
'blindbox_inventory' => $blindbox_count,#盲盒库存
'start_time' => strtotime(input('start_time', 0)),#活动开启时间
'end_time' => strtotime(input('end_time', 0)),#活动结束时间
'category_id' => input('category_id', 0),#盲盒分类
'early_inventory' => input('early_inventory', 0),#库存预警
'sort' => input('sort', 0),#排序
'price' => input('price', ''),#拆盒价
'new_price' => ( input('new_price', 0) > 0 ) ? input('new_price', '') : input('price', ''),#新人拆盒价
'is_emptybox' => input('is_emptybox', 1),#空盒是否显示1显示 2不显示
'is_balance' => input('is_balance', 0),#是否用余额支付
'remark' => input('remark', ''),#说明
'goods_ids' => implode(',', $goods_ids),#盲盒内所有的商品规格Id
'goods' => $goods,
'site_id' => $this->site_id,
'create_time' => time(),
];
$blindbox_model = new BlindboxModel();
$res = $blindbox_model->addBlindbox($data);
return $res;
} else {
$category_model = new BlindboxCategoryModel();
$category_data = $category_model->getBlindboxCategoryList([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 1 ] ], 'category_id,category_name')[ 'data' ] ?? [];
if ($category_data) {
$category_data = array_column($category_data, 'category_name', 'category_id');
}
$this->assign('category_data', $category_data);
return $this->fetch("blindbox/add");
}
}
/**
* 编辑
* @return array|mixed
*/
public function edit()
{
$blindbox_id = input('blindbox_id', 0);
$blindbox_model = new BlindboxModel();
if (request()->isAjax()) {
$input = input();
$data = [];
$data[ 'site_id' ] = $this->site_id;
if (isset($input[ 'blindbox_id' ])) $data[ 'blindbox_id' ] = $input[ 'blindbox_id' ];
if (isset($input[ 'price' ])) $data[ 'price' ] = $input[ 'price' ];
if (isset($input[ 'blindbox_name' ])) $data[ 'blindbox_name' ] = $input[ 'blindbox_name' ];
if (isset($input[ 'blindbox_images' ])) $data[ 'blindbox_images' ] = $input[ 'blindbox_images' ];
if (isset($input[ 'start_time' ])) $data[ 'start_time' ] = $input[ 'start_time' ] ? strtotime($input[ 'start_time' ]) : 0;
if (isset($input[ 'end_time' ])) $data[ 'end_time' ] = $input[ 'end_time' ] ? strtotime($input[ 'end_time' ]) : 0;
if (isset($input[ 'category_id' ])) $data[ 'category_id' ] = $input[ 'category_id' ];
if (isset($input[ 'sort' ])) $data[ 'sort' ] = $input[ 'sort' ];
if (isset($input[ 'early_inventory' ])) $data[ 'early_inventory' ] = $input[ 'early_inventory' ];
if (isset($input[ 'price' ])) $data[ 'price' ] = $input[ 'price' ];
if (isset($input[ 'new_price' ])) $data[ 'new_price' ] = ( $input[ 'new_price' ] > 0 ) ? $input[ 'new_price' ] : $input[ 'price' ];
if (isset($input[ 'is_emptybox' ])) $data[ 'is_emptybox' ] = $input[ 'is_emptybox' ];
if (isset($input[ 'is_balance' ])) $data[ 'is_balance' ] = $input[ 'is_balance' ];
if (isset($input[ 'remark' ])) $data[ 'remark' ] = $input[ 'remark' ];
if (isset($input[ 'goods' ])) {
$goods = input('goods', '');
$goods_ids = array_column($goods, 'sku_id');
$goods_count = array_column($goods, 'num');
$blindbox_count = array_sum($goods_count);
$data[ 'blindbox_count' ] = $blindbox_count;#放置总量
$data[ 'blindbox_inventory' ] = $blindbox_count;#盲盒库存
$data[ 'goods_ids' ] = implode(',', $goods_ids);#盲盒内所有的商品规格Id
$data[ 'goods' ] = $goods;
}
$res = $blindbox_model->editBlindbox($data);
return $res;
} else {
$condition = [
[ 'blindbox_id', '=', $blindbox_id ],
];
$field = 'a.*,bc.category_name';
$alias = 'a';
$join = [
[ 'blindbox_category bc', 'bc.category_id = a.category_id', 'left' ]
];
$blindbox_info = $blindbox_model->getBlindboxInfo($condition, $field, $alias, $join)[ 'data' ] ?? [];
$goods_model = new BlindboxGoodsModel();
$goods_list = $goods_model->getBlindboxGoodsList([ [ 'a.site_id', '=', $this->site_id ], [ 'a.blindbox_id', '=', $blindbox_id ] ])[ 'data' ] ?? [];
$checked_goods = [];
if ($goods_list) {
foreach ($goods_list as $k => $v) {
$v[ 'num' ] = 1;
unset($v[ 'id' ]);
if (!isset($checked_goods[ $v[ 'sku_id' ] ])) {
$checked_goods[ $v[ 'sku_id' ] ] = $v;
} else {
$checked_goods[ $v[ 'sku_id' ] ][ 'num' ] += $v[ 'num' ] ?? 0;
}
}
}
$blindbox_info[ 'goods_list' ] = $checked_goods;
$blindbox_info[ 'goods_list_count' ] = count($checked_goods);
$this->assign('blindbox_info', $blindbox_info);
$category_model = new BlindboxCategoryModel();
$category_data = $category_model->getBlindboxCategoryList([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 1 ] ], 'category_id,category_name')[ 'data' ] ?? [];
if ($category_data) {
$category_data = array_column($category_data, 'category_name', 'category_id');
}
$this->assign('category_data', $category_data);
return $this->fetch("blindbox/edit");
}
}
/**
* 删除盲盒
* @return array
*/
public function del()
{
if (request()->isAjax()) {
$blindbox_id = input('blindbox_id', 0);
$data = [
'blindbox_id' => $blindbox_id,
'site_id' => $this->site_id,
];
$blindbox_model = new BlindboxModel();
return $blindbox_model->deleteBlindbox($data);
}
}
/**
* 关闭盲盒
* @return mixed
*/
public function close()
{
if (request()->isAjax()) {
$blindbox_id = input('blindbox_id', 0);
$data = [
'blindbox_id' => $blindbox_id,
'site_id' => $this->site_id,
];
$blindbox_model = new BlindboxModel();
return $blindbox_model->closeBlindbox($data);
}
}
/**
* 盲盒详情
* @return array|mixed
*/
public function detail()
{
$blindbox_id = input('blindbox_id', 0);
$blindbox_model = new BlindboxModel();
$condition = [
[ 'blindbox_id', '=', $blindbox_id ],
];
$field = 'a.*,bc.category_name';
$alias = 'a';
$join = [
[ 'blindbox_category bc', 'bc.category_id = a.category_id', 'left' ]
];
$blindbox_info = $blindbox_model->getBlindboxInfo($condition, $field, $alias, $join)[ 'data' ] ?? [];
if (empty($blindbox_info)) {
$this->error('未获取到盲盒信息', addon_url('blindbox/shop/blindbox/lists'));
}
$category_model = new BlindboxCategoryModel();
$category_data = $category_model->getBlindboxCategoryList([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 1 ] ], 'category_id,category_name')[ 'data' ] ?? [];
if ($category_data) {
$category_data = array_column($category_data, 'category_name', 'category_id');
}
$this->assign('category_data', $category_data);
$this->assign('blindbox_info', $blindbox_info);
return $this->fetch("blindbox/detail");
}
/**
* 活动推广
*/
public function spreadBlindbox()
{
$blindbox_id = input('blindbox_id', 0);
$blindbox_model = new BlindboxModel();
$res = $blindbox_model->urlQrcode('/pages_promotion/blindbox/index', [ 'blindbox_id' => $blindbox_id ], 'blindbox', $this->site_id);
return $res;
}
}