325 lines
11 KiB
PHP
325 lines
11 KiB
PHP
<?php
|
|
/**
|
|
* ThinkShop商城系统 - 团队十年电商经验汇集巨献!
|
|
* =========================================================
|
|
* Copy right 2019-2029 成都云之牛科技有限公司, 保留所有权利。
|
|
* ----------------------------------------------
|
|
* 官方网址: https://www.cdcloudshop.com
|
|
* =========================================================
|
|
*/
|
|
|
|
namespace addon\blindbox\model;
|
|
|
|
use app\model\BaseModel;
|
|
use app\model\system\Cron;
|
|
use app\model\upload\Upload;
|
|
|
|
class Blindbox extends BaseModel
|
|
{
|
|
private $blindbox_status = [
|
|
0 => '未开始',
|
|
1 => '进行中',
|
|
2 => '已结束',
|
|
];
|
|
|
|
/**
|
|
* 获取预售活动状态
|
|
* @return array
|
|
*/
|
|
public function getBlindboxStatus()
|
|
{
|
|
return $this->success($this->blindbox_status);
|
|
}
|
|
|
|
/**
|
|
* 获取分页列表
|
|
* @param array $condition
|
|
* @param number $page
|
|
* @param string $page_size
|
|
* @param string $order
|
|
* @param string $field
|
|
*/
|
|
public function getBlindboxPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'sort asc', $field = '*', $alias = 'a', $join = [])
|
|
{
|
|
$list = model('blindbox')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
|
|
return $this->success($list);
|
|
}
|
|
|
|
/**
|
|
* 盲盒活动修改排序
|
|
* @param int $sort
|
|
* @param int $label_id
|
|
*/
|
|
public function blindboxSort($sort, $blindbox_id)
|
|
{
|
|
$res = model('blindbox')->update([ 'sort' => $sort ], [ [ 'blindbox_id', '=', $blindbox_id ] ]);
|
|
return $this->success($res);
|
|
}
|
|
|
|
/**
|
|
* 获取盲盒活动信息
|
|
* @param array $condition
|
|
* @param bool $field
|
|
* @param string $alias
|
|
* @param null $join
|
|
* @param null $data
|
|
* @return array
|
|
*/
|
|
public function getBlindboxInfo($condition = [], $field = true, $alias = 'a', $join = null, $data = null)
|
|
{
|
|
$res = model('blindbox')->getInfo($condition, $field, $alias, $join, $data);
|
|
|
|
return $this->success($res);
|
|
}
|
|
|
|
/**
|
|
* 新增盲盒
|
|
* @param $data
|
|
* @return array
|
|
*/
|
|
public function addBlindbox($data)
|
|
{
|
|
if ($data[ 'start_time' ] > time()) {
|
|
$data[ 'blindbox_status' ] = 0;
|
|
} else {
|
|
$data[ 'blindbox_status' ] = 1;
|
|
}
|
|
$goods_data = $data[ 'goods' ];
|
|
|
|
unset($data[ 'goods' ]);
|
|
|
|
model('blindbox')->startTrans();
|
|
try {
|
|
$res = model("blindbox")->add($data);
|
|
|
|
$cron = new Cron();
|
|
//增加定时更改活动状态自动事件
|
|
if (!empty($data[ 'start_time' ])) {
|
|
$cron->addCron(1, 0, "盲盒变更活动状态", "CronChangeBlindboxStatus", $data[ 'start_time' ], $res);
|
|
}
|
|
if (!empty($data[ 'end_time' ])) {
|
|
$cron->addCron(1, 0, "盲盒变更活动状态", "CronChangeBlindboxStatus", $data[ 'end_time' ], $res);
|
|
}
|
|
|
|
#新增盒子
|
|
$goods_arr = [
|
|
'blindbox_id' => $res,
|
|
'site_id' => $data[ 'site_id' ],
|
|
'create_time' => time(),
|
|
];
|
|
$temp = [];
|
|
$num = 0;
|
|
#获取盒子的数组
|
|
foreach ($goods_data as $k => $v) {
|
|
for ($i = 0; $i < $v[ 'num' ]; $i++) {
|
|
$temp[ $num ] = $goods_arr;
|
|
$temp[ $num ][ 'sku_id' ] = $v[ 'sku_id' ];
|
|
$temp[ $num ][ 'sort' ] = rand(0, 100000);
|
|
$num = $num + 1;
|
|
}
|
|
}
|
|
model('blindbox_goods')->addList($temp);
|
|
|
|
model('blindbox')->commit();
|
|
return $this->success($res);
|
|
} catch (\Exception $e) {
|
|
model('blindbox')->rollback();
|
|
return $this->error($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 编辑盲盒
|
|
* @param $data
|
|
* @return array
|
|
*/
|
|
public function editBlindbox($data)
|
|
{
|
|
if (!empty($data[ 'start_time' ]) > time()) {
|
|
$data[ 'blindbox_status' ] = 0;
|
|
} else {
|
|
$data[ 'blindbox_status' ] = 1;
|
|
}
|
|
$goods_data = '';
|
|
if (!empty($data[ 'goods' ])) {
|
|
$goods_data = $data[ 'goods' ];
|
|
unset($data[ 'goods' ]);
|
|
}
|
|
$blindbox_id = $data[ 'blindbox_id' ];
|
|
unset($data[ 'blindbox_id' ]);
|
|
|
|
model('blindbox')->startTrans();
|
|
try {
|
|
$blindbox_info = model("blindbox")->getInfo([ [ 'blindbox_id', '=', $blindbox_id ] ]);
|
|
if (!empty($blindbox_info[ 'blindbox_images' ]) && !empty($data[ 'blindbox_images' ]) && $blindbox_info[ 'blindbox_images' ] != $data[ 'blindbox_images' ]) {
|
|
$upload_model = new Upload();
|
|
$upload_model->deletePic($blindbox_info[ 'blindbox_images' ], $blindbox_info[ 'site_id' ]);
|
|
}
|
|
|
|
$res = model("blindbox")->update($data, [ [ 'blindbox_id', '=', $blindbox_id ] ]);
|
|
|
|
$cron = new Cron();
|
|
$cron->deleteCron([ [ 'event', '=', 'CronChangeBlindboxStatus' ], [ 'relate_id', '=', $blindbox_id ] ]);
|
|
//增加定时更改活动状态自动事件
|
|
if (!empty($data[ 'start_time' ])) {
|
|
$cron->addCron(1, 0, "盲盒变更活动状态", "CronChangeBlindboxStatus", $data[ 'start_time' ], $res);
|
|
}
|
|
if (!empty($data[ 'end_time' ])) {
|
|
$cron->addCron(1, 0, "盲盒变更活动状态", "CronChangeBlindboxStatus", $data[ 'end_time' ], $res);
|
|
}
|
|
if (!empty($goods_data)) {
|
|
#移除之前所有盒子重新入
|
|
model("blindbox_goods")->delete([ [ 'blindbox_id', '=', $blindbox_id ] ]);
|
|
#新增盒子
|
|
$goods_arr = [
|
|
'blindbox_id' => $blindbox_id,
|
|
'site_id' => $data[ 'site_id' ],
|
|
'create_time' => time(),
|
|
];
|
|
$temp = [];
|
|
$num = 0;
|
|
#获取盒子的数组
|
|
foreach ($goods_data as $k => $v) {
|
|
for ($i = 0; $i < $v[ 'num' ]; $i++) {
|
|
$temp[ $num ] = $goods_arr;
|
|
$temp[ $num ][ 'sku_id' ] = $v[ 'sku_id' ];
|
|
$temp[ $num ][ 'sort' ] = rand(0, 100000);
|
|
$num = $num + 1;
|
|
}
|
|
}
|
|
model('blindbox_goods')->addList($temp);
|
|
}
|
|
|
|
model('blindbox')->commit();
|
|
|
|
return $this->success($res);
|
|
} catch (\Exception $e) {
|
|
model('blindbox')->rollback();
|
|
return $this->error($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 关闭盲盒
|
|
* @param $data
|
|
* @return array
|
|
*/
|
|
public function closeBlindbox($data)
|
|
{
|
|
$blindbox_id = $data[ 'blindbox_id' ];
|
|
$site_id = $data[ 'site_id' ];
|
|
$condition = [
|
|
[ 'blindbox_id', '=', $blindbox_id ],
|
|
[ 'site_id', '=', $site_id ],
|
|
];
|
|
model('blindbox')->startTrans();
|
|
try {
|
|
$res = model('blindbox')->update([ 'blindbox_status' => 2 ], $condition);
|
|
$cron = new Cron();
|
|
$cron->deleteCron([ [ 'event', '=', 'CronChangeBlindboxStatus' ], [ 'relate_id', '=', $blindbox_id ] ]);
|
|
model('blindbox')->commit();
|
|
return $this->success($res);
|
|
} catch (\Exception $e) {
|
|
model('blindbox')->rollback();
|
|
return $this->error($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 删除盲盒
|
|
* @param $data
|
|
* @return array
|
|
*/
|
|
public function deleteBlindbox($data)
|
|
{
|
|
$blindbox_id = $data[ 'blindbox_id' ];
|
|
$site_id = $data[ 'site_id' ];
|
|
|
|
model('blindbox')->startTrans();
|
|
try {
|
|
$condition = [
|
|
[ 'blindbox_id', '=', $blindbox_id ],
|
|
[ 'site_id', '=', $site_id ],
|
|
];
|
|
$is_dispatch = model("blindbox_order")->getCount([ [ 'blindbox_id', '=', $blindbox_id ], [ 'site_id', '=', $site_id ], [ 'status', '=', 1 ], [ 'is_dispatch', '=', 0 ] ]);
|
|
if ($is_dispatch > 0) {
|
|
return $this->error('', '存在未发货的商品,联系买家尽快发货!');
|
|
}
|
|
|
|
$blindbox_info = model("blindbox")->getInfo($condition);
|
|
if (!empty($blindbox_info[ 'blindbox_images' ])) {
|
|
$upload_model = new Upload();
|
|
$upload_model->deletePic($blindbox_info[ 'blindbox_images' ], $blindbox_info[ 'site_id' ]);
|
|
}
|
|
|
|
$res = model("blindbox")->delete($condition);
|
|
#删除活动的商品
|
|
model('blindbox_goods')->delete([ [ 'blindbox_id', '=', $blindbox_id ] ]);
|
|
#删除关联组
|
|
model('blindbox_member_group')->delete([ [ 'blindbox_id', '=', $blindbox_id ] ]);
|
|
|
|
$cron = new Cron();
|
|
$cron->deleteCron([ [ 'event', '=', 'CronChangeBlindboxStatus' ], [ 'relate_id', '=', $blindbox_id ] ]);
|
|
model('blindbox')->commit();
|
|
return $this->success($res);
|
|
} catch (\Exception $e) {
|
|
model('blindbox')->rollback();
|
|
return $this->error($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 盲盒列表
|
|
* @param $condition
|
|
* @param bool $field
|
|
* @param string $order
|
|
* @param string $alias
|
|
* @param array $join
|
|
* @return array
|
|
*/
|
|
public function getBlindboxList($condition, $field = true, $order = '', $alias = 'a', $join = [])
|
|
{
|
|
$list = model("blindbox")->getList($condition, $field, $order, $alias, $join);
|
|
return $this->success($list);
|
|
}
|
|
|
|
/**
|
|
* 定时 更改活动状态
|
|
* @param $blindbox_id
|
|
* @return array
|
|
*/
|
|
public function changeBlindboxStatus($blindbox_id)
|
|
{
|
|
$info = model('blindbox')->getInfo([ [ 'blindbox_id', '=', $blindbox_id ] ]);
|
|
if (empty($info)) $this->success();
|
|
|
|
if ($info[ 'end_time' ] <= time()) {
|
|
$status = 2;
|
|
} else if ($info[ 'start_time' ] <= time() && $info[ 'end_time' ] > time()) {
|
|
$status = 1;
|
|
} else {
|
|
$status = 0;
|
|
}
|
|
$res = model("blindbox")->update([ 'blindbox_status' => $status ], [ [ 'blindbox_id', '=', $blindbox_id ] ]);
|
|
return $this->success($res);
|
|
}
|
|
|
|
public function urlQrcode($page, $qrcode_param, $promotion_type, $site_id)
|
|
{
|
|
$params = [
|
|
'site_id' => $site_id,
|
|
'data' => $qrcode_param,
|
|
'page' => $page,
|
|
'promotion_type' => $promotion_type,
|
|
'h5_path' => $page . '?blindbox_id=' . $qrcode_param[ 'blindbox_id' ],
|
|
'qrcode_path' => 'upload/qrcode/blindbox',
|
|
'qrcode_name' => [
|
|
'h5_name' => 'blindbox_id_' . $promotion_type . '_h5_' . $qrcode_param[ 'blindbox_id' ] . '_' . $site_id,
|
|
'weapp_name' => 'blindbox_id_' . $promotion_type . '_weapp_' . $qrcode_param[ 'blindbox_id' ] . '_' . $site_id
|
|
]
|
|
];
|
|
|
|
$solitaire = event('ExtensionInformation', $params);
|
|
return $this->success($solitaire[ 0 ]);
|
|
}
|
|
} |