261 lines
9.0 KiB
PHP
261 lines
9.0 KiB
PHP
<?php
|
||
/**
|
||
* ThinkShop商城系统 - 团队十年电商经验汇集巨献!
|
||
* =========================================================
|
||
* Copy right 2019-2029 成都云之牛科技有限公司, 保留所有权利。
|
||
* ----------------------------------------------
|
||
* 官方网址: https://www.cdcloudshop.com
|
||
* =========================================================
|
||
*/
|
||
|
||
namespace addon\blindbox\model;
|
||
|
||
use app\model\BaseModel;
|
||
|
||
class BlindboxGoods extends BaseModel
|
||
{
|
||
/**
|
||
* 获取分页列表
|
||
* @param array $condition
|
||
* @param number $page
|
||
* @param string $page_size
|
||
* @param string $order
|
||
* @param string $field
|
||
*/
|
||
public function getBlindboxGoodsPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'id desc', $field = '*', $alias = 'a', $join = [])
|
||
{
|
||
$list = model('blindbox_goods')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
|
||
return $this->success($list);
|
||
}
|
||
|
||
/**
|
||
* 获取盲盒盒子信息
|
||
* @param array $condition
|
||
* @param bool $field
|
||
* @param string $alias
|
||
* @param null $join
|
||
* @param null $data
|
||
* @return array
|
||
*/
|
||
public function getBlindboxGoodsInfo($condition = [], $field = true, $alias = 'a', $join = null, $data = null)
|
||
{
|
||
$res = model('blindbox_goods')->getInfo($condition, $field, $alias, $join, $data);
|
||
|
||
return $this->success($res);
|
||
}
|
||
|
||
|
||
/**
|
||
* 新增盲盒盒子
|
||
* @param $data
|
||
* @return array
|
||
*/
|
||
public function addBlindboxGoods($data)
|
||
{
|
||
$blindbox_id = $data[ 'blindbox_id' ];
|
||
$sku_id_arr = $data[ 'sku_id_arr' ];
|
||
$site_id = $data[ 'site_id' ];
|
||
$data = [
|
||
'blindbox_id' => $blindbox_id,
|
||
'site_id' => $site_id,
|
||
'create_time' => time(),
|
||
];
|
||
$temp = [];
|
||
model('blindbox_goods')->startTrans();
|
||
try {
|
||
if ($sku_id_arr) {
|
||
foreach ($sku_id_arr as $k => $v) {
|
||
$temp[ $k ] = $data;
|
||
$temp[ $k ][ 'sku_id' ] = $v;
|
||
$temp[ $k ][ 'sort' ] = rand(0, 100000);
|
||
}
|
||
|
||
$blindbox_condition = [
|
||
[ 'blindbox_id', '=', $blindbox_id ]
|
||
];
|
||
$goods_ids = model("blindbox")->getValue($blindbox_condition, 'goods_ids');
|
||
#初始的父表下的sku_id
|
||
$goods_data = explode(',', $goods_ids);
|
||
#新的 父类下sku_id
|
||
$goods_temp = array_unique(array_merge($goods_data, $sku_id_arr));
|
||
|
||
model("blindbox")->update([ 'goods_ids' => implode(',', $goods_temp) ], $blindbox_condition);
|
||
model("blindbox")->setInc($blindbox_condition, 'blindbox_count', count($sku_id_arr));
|
||
model("blindbox")->setInc($blindbox_condition, 'blindbox_inventory', count($sku_id_arr));
|
||
}
|
||
$res = model("blindbox_goods")->addList($temp);
|
||
|
||
model('blindbox_goods')->commit();
|
||
return $this->success($res);
|
||
} catch (\Exception $e) {
|
||
model('blindbox_goods')->rollback();
|
||
return $this->error($e->getMessage());
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 编辑盲盒盒子
|
||
* @param $data
|
||
* @return array
|
||
*/
|
||
public function editBlindboxGoods($data)
|
||
{
|
||
$blindbox_id = $data[ 'blindbox_id' ];
|
||
$id = $data[ 'id' ];
|
||
$sku_id = $data[ 'sku_id' ];
|
||
$site_id = $data[ 'site_id' ];
|
||
#父表
|
||
$blindbox_condition = [
|
||
[ 'blindbox_id', '=', $blindbox_id ]
|
||
];
|
||
#子表
|
||
$condition = [
|
||
[ 'id', '=', $id ]
|
||
];
|
||
model('blindbox_goods')->startTrans();
|
||
try {
|
||
$goods_ids = model("blindbox")->getValue($blindbox_condition, 'goods_ids');
|
||
#初始的父表下的sku_id
|
||
$goods_data = explode(',', $goods_ids);
|
||
|
||
#获取当前盒子下sku_id(子表)(被修改的sku_id)
|
||
$box_sku_id = model("blindbox_goods")->getValue($condition, 'sku_id');
|
||
#获取要修改的sku_id的值
|
||
$new_sku_num = model("blindbox_goods")->getCount([ [ 'site_id', '=', $site_id ], [ 'sku_id', '=', $sku_id ], [ 'blindbox_id', '=', $blindbox_id ] ]);
|
||
#获取被修改的sku_id的值
|
||
$old_sku_num = model("blindbox_goods")->getCount([ [ 'site_id', '=', $site_id ], [ 'sku_id', '=', $box_sku_id ], [ 'blindbox_id', '=', $blindbox_id ] ]);
|
||
if ($new_sku_num > 0) {
|
||
#存在不用变父表
|
||
if ($old_sku_num == 1) {
|
||
#只有一个改父表
|
||
$key = array_search($box_sku_id, $goods_data);
|
||
unset($goods_data[ $key ]);
|
||
} else {
|
||
#存在多个 不用改父表
|
||
}
|
||
} else {
|
||
#变父表
|
||
if ($old_sku_num == 1) {
|
||
#只有一个改父表
|
||
$key = array_search($box_sku_id, $goods_data);
|
||
unset($goods_data[ $key ]);
|
||
$goods_data = array_merge($goods_data, [ $sku_id ]);
|
||
} else {
|
||
#存在多个 不用改父表
|
||
$goods_data = array_merge($goods_data, [ $sku_id ]);
|
||
}
|
||
}
|
||
|
||
model("blindbox")->update([ 'goods_ids' => implode(',', $goods_data) ], $blindbox_condition);
|
||
|
||
$res = model("blindbox_goods")->update([ 'sku_id' => $sku_id ], $condition);
|
||
|
||
model('blindbox_goods')->commit();
|
||
|
||
return $this->success($res);
|
||
} catch (\Exception $e) {
|
||
model('blindbox_goods')->rollback();
|
||
return $this->error($e->getMessage());
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 删除盲盒盒子
|
||
* @param $data
|
||
* @return array
|
||
*/
|
||
public function delBlindboxGoods($data)
|
||
{
|
||
$blindbox_id = $data[ 'blindbox_id' ];
|
||
$ids = $data[ 'ids' ];
|
||
$sku_ids = $data[ 'sku_ids' ];
|
||
$site_id = $data[ 'site_id' ];
|
||
$blindbox_condition = [
|
||
[ 'blindbox_id', '=', $blindbox_id ]
|
||
];
|
||
model('blindbox_goods')->startTrans();
|
||
try {
|
||
#要删除的盒子 Id
|
||
$ids_arr = explode(',', $ids);
|
||
$count = model("blindbox_goods")->getCount([ [ 'site_id', '=', $site_id ], [ 'id', 'in', $ids_arr ], [ 'status', '=', 0 ] ]) ?? 0;
|
||
|
||
if ($count != count($ids_arr)) {
|
||
return $this->error('', '已拆的盲盒不可删除哦');
|
||
}
|
||
|
||
#要删除的sku
|
||
$sku_ids_arr = explode(',', $sku_ids);
|
||
$box_list = model("blindbox_goods")->getList([ [ 'site_id', '=', $site_id ], [ 'blindbox_id', '=', $blindbox_id ] ], 'sku_id') ?? [];
|
||
#拥有的sku
|
||
$sku_arr = [];
|
||
if ($box_list) {
|
||
$sku_arr = array_column($box_list, 'sku_id');
|
||
}
|
||
|
||
#删除操作
|
||
foreach ($sku_arr as $k => $v) {
|
||
foreach ($sku_ids_arr as $key => $val) {
|
||
if ($v == $val) {
|
||
unset($sku_arr[ $k ]);
|
||
unset($sku_ids_arr[ $key ]);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
#删除完的sku $sku_arr
|
||
#去除重复值
|
||
$sku_arr = array_unique($sku_arr);
|
||
$goods_data = implode(',', $sku_arr);
|
||
|
||
model("blindbox")->update([ 'goods_ids' => $goods_data ], $blindbox_condition);
|
||
|
||
#库存减一 发放量减一
|
||
model("blindbox")->setDec($blindbox_condition, 'blindbox_count', $count);
|
||
model("blindbox")->setDec($blindbox_condition, 'blindbox_inventory', $count);
|
||
|
||
$condition = [ [ 'id', 'in', $ids_arr ] ];
|
||
$res = model("blindbox_goods")->delete($condition);
|
||
|
||
model('blindbox_goods')->commit();
|
||
|
||
return $this->success($res);
|
||
} catch (\Exception $e) {
|
||
model('blindbox_goods')->rollback();
|
||
return $this->error($e->getMessage());
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 盲盒盒子列表
|
||
* @param $condition
|
||
* @param bool $field
|
||
* @param string $order
|
||
* @param string $alias
|
||
* @param array $join
|
||
* @return array
|
||
*/
|
||
public function getBlindboxGoodsList($condition)
|
||
{
|
||
$alias = 'a';
|
||
$field = 'a.*,gs.sku_name,gs.price,gs.sku_image,gs.stock,gs.goods_id';
|
||
$join = [
|
||
[ 'goods_sku gs', 'gs.sku_id = a.sku_id', 'left' ]
|
||
];
|
||
$order = '';
|
||
$list = model("blindbox_goods")->getList($condition, $field, $order, $alias, $join);
|
||
|
||
return $this->success($list);
|
||
}
|
||
|
||
public function getBlindboxGoodsCount($condition, $field = '*')
|
||
{
|
||
$res = model('blindbox_goods')->getCount($condition, $field);
|
||
return $this->success($res);
|
||
}
|
||
|
||
public function getSkuInfo($condition, $field = '*')
|
||
{
|
||
$info = model('goods_sku')->getInfo($condition, $field);
|
||
return $this->success($info);
|
||
}
|
||
} |