admin/addon/blindbox/model/BlindboxGoods.php

261 lines
9.0 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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);
}
}