admin/addon/blindbox/model/Blindbox.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 ]);
}
}