feat(cate): 更新商品分类逻辑并优化商品分类列表查询

This commit is contained in:
mkm 2024-06-11 15:52:04 +08:00
parent 3d55b3f505
commit 48bf661a78
2 changed files with 47 additions and 56 deletions

View File

@ -183,26 +183,34 @@ class StoreProductLogic extends BaseLogic
/** /**
* 更新商品分类 * 更新商品分类
*/ */
public static function updateGoodsclass($id, $type = 0) public static function updateGoodsclass($cate_id, $type = 0)
{ {
$pid = StoreCategory::where('id', $id)->value('pid'); $pid = StoreCategory::where('id', $cate_id)->value('pid');
if ($pid) { if ($pid) {
$goodsclass = StoreCategory::where('id', $pid)->field('pid,children')->find(); //查二级分类
if ($goodsclass) { $StoreCategory = StoreCategory::where('id', $pid)->find();
if (count($goodsclass['children']) >= 1) { if ($StoreCategory) {
if (!in_array($id, $goodsclass['children'])) { $StoreCategory = StoreCategory::where('id', $StoreCategory['id'])->find();
$arr = $goodsclass['children']; self::cate_update($cate_id,0,3);
array_push($arr, $id); self::cate_update($pid,0,2);
StoreCategory::where('id', $pid)->update(['children' => $arr]); self::cate_update($StoreCategory['id'],0,1);
if ($goodsclass['pid'] != 0 && $type == 0) { } else {
self::updateGoodsclass($pid, 1); self::cate_update($cate_id,0,2);
} self::cate_update($pid,0,1);
}
}
} }
} else {
self::cate_update($cate_id,0,1);
} }
} }
public static function cate_update($cate_id=0,$product_id=0,$leve=1){
$find=Db::name('store_product_cate')->where(['store_id' => 1, 'cate_id' => $cate_id,'leve'=>$leve])->find();
if($find){
Db::name('store_product_cate')->where('id',$find['id'])->inc('count',1)->update();
}else{
Db::name('store_product_cate')->insert(['store_id' => 1, 'cate_id' => $cate_id,'count'=>1,'leve'=>$leve,'create_time'=>time(),'update_time'=>time()]);
}
}
/** /**
* 复制商品到门店 * 复制商品到门店
*/ */

View File

@ -7,6 +7,7 @@ use app\admin\lists\BaseAdminDataLists;
use app\common\model\cate\Cate; use app\common\model\cate\Cate;
use app\common\lists\ListsSearchInterface; use app\common\lists\ListsSearchInterface;
use app\Request; use app\Request;
use think\facade\Db;
/** /**
* 商品分类列表 * 商品分类列表
@ -26,7 +27,7 @@ class CateLists extends BaseAdminDataLists implements ListsSearchInterface
public function setSearch(): array public function setSearch(): array
{ {
return [ return [
'=' => ['pid', 'name', 'data', 'pic', 'sort'], '=' => ['pid', 'name', 'data', 'store_id', 'sort'],
]; ];
} }
@ -42,28 +43,19 @@ class CateLists extends BaseAdminDataLists implements ListsSearchInterface
*/ */
public function lists(): array public function lists(): array
{ {
$pid=Request()->get('pid',0); $leve = Request()->get('leve', 1);
if($pid==0){ $this->searchWhere[] = ['leve', '=', $leve];
$lists = Cate::where($this->searchWhere) $this->searchWhere[] = ['count', '>', 0];
->where('pid', 0) $cate_arr = Db::name('store_product_cate')->where($this->searchWhere)->column('cate_id');
->where('children','<>',null) $lists = [];
->field(['id', 'pid', 'name', 'data', 'pic', 'sort']) if ($cate_arr) {
->limit($this->limitOffset, $this->limitLength) return Cate::where('id', 'in', $cate_arr)
->order(['sort' => 'desc','id' => 'desc'])
->select()->toArray();
}else{
$three=Request()->get('three',0);
if($three==0){
$where[]=['children','<>',''];
$this->where=$where;
}
$lists = Cate::where($this->searchWhere)
->where($this->where)
->field(['id', 'pid', 'name', 'data', 'pic', 'sort']) ->field(['id', 'pid', 'name', 'data', 'pic', 'sort'])
->limit($this->limitOffset, $this->limitLength) ->limit($this->limitOffset, $this->limitLength)
->order(['sort' => 'desc', 'id' => 'desc']) ->order(['sort' => 'desc', 'id' => 'desc'])
->select()->toArray(); ->select()->toArray();
} }
// ->each(function ($item) { // ->each(function ($item) {
// $a = Goodsclass::where('pid', $item['id'])->field(['id', 'pid', 'name', 'data', 'pic', 'sort'])->select(); // $a = Goodsclass::where('pid', $item['id'])->field(['id', 'pid', 'name', 'data', 'pic', 'sort'])->select();
// $item['children'] = $a; // $item['children'] = $a;
@ -87,17 +79,8 @@ class CateLists extends BaseAdminDataLists implements ListsSearchInterface
*/ */
public function count(): int public function count(): int
{ {
$pid=Request()->get('pid',0);
if($pid==0){ return Db::name('store_product_cate')->where($this->searchWhere)
return Cate::where($this->searchWhere)->where('pid', 0)
->where('children','<>',null)
->count();
}else{
return Cate::where($this->searchWhere)
->where($this->where)
->count(); ->count();
} }
}
} }