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