<?php
|
|
namespace app\supplier\model\product;
|
|
use think\facade\Cache;
|
use app\common\model\product\Category as CategoryModel;
|
|
/**
|
* 商品分类模型
|
*/
|
class Category extends CategoryModel
|
{
|
/**
|
* 所有分类
|
*/
|
public static function getSupplierALL($shop_supplier_id)
|
{
|
$model = new static;
|
if (!Cache::get('category_supplier_' . $shop_supplier_id)) {
|
$data = $model->with(['images'])
|
->where('shop_supplier_id','in',[0,$shop_supplier_id])
|
->order(['sort' => 'asc', 'create_time' => 'asc'])->select();
|
$all = !empty($data) ? $data->toArray() : [];
|
$tree = [];
|
foreach ($all as $first) {
|
if ($first['parent_id'] != 0) continue;
|
$twoTree = [];
|
foreach ($all as $two) {
|
if ($two['parent_id'] != $first['category_id']) continue;
|
$threeTree = [];
|
foreach ($all as $three)
|
$three['parent_id'] == $two['category_id']
|
&& $threeTree[$three['category_id']] = $three;
|
!empty($threeTree) && $two['child'] = $threeTree;
|
array_push($twoTree, $two);
|
}
|
if (!empty($twoTree)) {
|
$temp_two_tree = array_column($twoTree, 'sort');
|
array_multisort($temp_two_tree, SORT_ASC, $twoTree);
|
$first['child'] = $twoTree;
|
}
|
array_push($tree, $first);
|
}
|
Cache::tag('cache')->set('category_supplier_' .$shop_supplier_id, compact('all', 'tree'));
|
}
|
return Cache::get('category_supplier_' . $shop_supplier_id);
|
}
|
|
/**
|
* 获取所有分类
|
*/
|
public static function getSupplierCacheAll($shop_supplier_id)
|
{
|
return self::getSupplierALL($shop_supplier_id)['all'];
|
}
|
|
/**
|
* 获取所有分类(树状结构)
|
*/
|
public static function getSupplierCacheTree($shop_supplier_id)
|
{
|
return self::getSupplierALL($shop_supplier_id)['tree'];
|
}
|
|
/**
|
* 获取所有分类(树状结构)
|
* @return string
|
*/
|
public static function getSupplierCacheTreeJson($shop_supplier_id)
|
{
|
return json_encode(static::getSupplierCacheTree($shop_supplier_id));
|
}
|
/**
|
* 获取所有一级分类
|
*/
|
public static function getSupplierFirstCategory($shop_supplier_id)
|
{
|
return (new static())->where('parent_id', '=', 0)
|
->where('shop_supplier_id', '=', $shop_supplier_id)
|
->order(['sort' => 'asc', 'create_time' => 'asc'])
|
->select();
|
}
|
/**
|
* 添加新记录
|
*/
|
public function add($data)
|
{
|
$data['app_id'] = self::$app_id;
|
$this->deleteCache($data['shop_supplier_id']);
|
return $this->save($data);
|
}
|
|
/**
|
* 编辑记录
|
*/
|
public function edit($data)
|
{
|
if ($this['shop_supplier_id']==0){
|
$this->error = '该分类为平台分类,不可以修改';
|
return false;
|
}
|
// 验证:一级分类如果存在子类,则不允许移动
|
if ($data['parent_id'] > 0 && static::hasSubCategory($this['category_id'])) {
|
$this->error = '该分类下存在子分类,不可以移动';
|
return false;
|
}
|
$this->deleteCache($this['shop_supplier_id']);
|
// !array_key_exists('image_id', $data) && $data['image_id'] = 0;
|
return $this->save($data) !== false;
|
}
|
|
/**
|
* 删除商品分类
|
*/
|
public function remove($categoryId)
|
{
|
if ($this['shop_supplier_id']==0){
|
$this->error = '该分类为平台分类,不允许删除';
|
return false;
|
}
|
// 判断是否存在商品
|
if ($productCount = (new Product)->getProductTotal(['category_id' => $categoryId])) {
|
$this->error = '该分类下存在' . $productCount . '个商品,不允许删除';
|
return false;
|
}
|
// 判断是否存在子分类
|
if (static::hasSubCategory($categoryId)) {
|
$this->error = '该分类下存在子分类,请先删除';
|
return false;
|
}
|
$this->deleteCache($this['shop_supplier_id']);
|
return $this->delete();
|
}
|
|
/**
|
* 删除缓存
|
*/
|
private function deleteCache($shop_supplier_id)
|
{
|
Cache::delete('category_supplier_'.$shop_supplier_id);
|
Cache::delete('category_all_' . static::$app_id);
|
return Cache::delete('category_' . static::$app_id);
|
}
|
|
}
|