| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- <?php
- /**
- * Niushop商城系统 - 团队十年电商经验汇集巨献!
- * =========================================================
- * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
- * ----------------------------------------------
- * 官方网址: https://www.niushop.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);
- }
- }
|