You've already forked qlg.tsgz.moe
							
							
		
			
				
	
	
		
			619 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			619 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace wstmart\admin\model;
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
 * ============================================================================
 | 
						|
 | 
						|
 * 商品分类业务处理
 | 
						|
 | 
						|
 */
 | 
						|
 | 
						|
use think\Db;
 | 
						|
 | 
						|
class GoodsCats extends Base{
 | 
						|
 | 
						|
	/**
 | 
						|
 | 
						|
	 * 获取树形分类
 | 
						|
 | 
						|
	 */
 | 
						|
 | 
						|
	public function pageQuery(){
 | 
						|
 | 
						|
		return $this->where(['dataFlag'=>1,'parentId'=>input('catId/d',0)])->order('catSort asc,catId desc')->paginate(1000)->toArray();
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
 | 
						|
	 * 获取列表
 | 
						|
 | 
						|
	 */
 | 
						|
 | 
						|
	public function listQuery($parentId){
 | 
						|
 | 
						|
		return $this->where(['dataFlag'=>1,'parentId'=>$parentId])->order('catSort asc,catName asc')->select();
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	
 | 
						|
 | 
						|
	/**
 | 
						|
 | 
						|
	 *获取商品分类名值对
 | 
						|
 | 
						|
	 */
 | 
						|
 | 
						|
	public function listKeyAll(){
 | 
						|
 | 
						|
		$rs = $this->field("catId,catName")->where(['dataFlag'=>1])->order('catSort asc,catName asc')->select();
 | 
						|
 | 
						|
		$data = array();
 | 
						|
 | 
						|
		foreach ($rs as $key => $cat) {
 | 
						|
 | 
						|
			$data[$cat["catId"]] = $cat["catName"];
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		return $data;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	
 | 
						|
 | 
						|
	/**
 | 
						|
 | 
						|
	 *	获取树形分类
 | 
						|
 | 
						|
	 */
 | 
						|
 | 
						|
	public function getTree($data, $parentId=0){
 | 
						|
 | 
						|
		$arr = array();
 | 
						|
 | 
						|
		foreach($data as $k=>$v)
 | 
						|
 | 
						|
		{
 | 
						|
 | 
						|
			if($v['parentId']==$parentId && $v['dataFlag']==1)
 | 
						|
 | 
						|
			{
 | 
						|
 | 
						|
				//再查找该分类下是否还有子分类
 | 
						|
 | 
						|
				$v['child'] = $this->getTree($data, $v['catId']);
 | 
						|
 | 
						|
				//统计child
 | 
						|
 | 
						|
				$v['childNum'] = count($v['child']);
 | 
						|
 | 
						|
				//将找到的分类放回该数组中
 | 
						|
 | 
						|
				$arr[]=$v;
 | 
						|
 | 
						|
			}
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		return $arr;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	
 | 
						|
 | 
						|
	/**
 | 
						|
 | 
						|
	 * 迭代获取下级
 | 
						|
 | 
						|
	 * 获取一个分类下的所有子级分类id
 | 
						|
 | 
						|
	 */
 | 
						|
 | 
						|
	public function getChild($pid){
 | 
						|
 | 
						|
		$data = $this->where("dataFlag=1")->select();
 | 
						|
 | 
						|
		//获取该分类id下的所有子级分类id
 | 
						|
 | 
						|
		$ids = $this->_getChild($data, $pid, true);//每次调用都清空一次数组
 | 
						|
 | 
						|
		//把自己也放进来
 | 
						|
 | 
						|
		array_unshift($ids, $pid);
 | 
						|
 | 
						|
		return $ids;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	
 | 
						|
 | 
						|
	public function _getChild($data, $pid, $isClear=false){
 | 
						|
 | 
						|
		static $ids = array();
 | 
						|
 | 
						|
		if($isClear)//是否清空数组
 | 
						|
 | 
						|
			$ids = array();
 | 
						|
 | 
						|
		foreach($data as $k=>$v)
 | 
						|
 | 
						|
		{
 | 
						|
 | 
						|
			if($v['parentId']==$pid && $v['dataFlag']==1)
 | 
						|
 | 
						|
			{
 | 
						|
 | 
						|
				$ids[] = $v['catId'];//将找到的下级分类id放入静态数组
 | 
						|
 | 
						|
				//再找下当前id是否还存在下级id
 | 
						|
 | 
						|
				$this->_getChild($data, $v['catId']);
 | 
						|
 | 
						|
			}
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		return $ids;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	
 | 
						|
 | 
						|
	/**
 | 
						|
 | 
						|
	 * 获取指定对象
 | 
						|
 | 
						|
	 */
 | 
						|
 | 
						|
	public function getGoodscats($id){
 | 
						|
 | 
						|
		return $this->where(['catId'=>$id])->find();
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	 
 | 
						|
 | 
						|
	 /**
 | 
						|
 | 
						|
	  * 显示是否推荐/不推荐
 | 
						|
 | 
						|
	  */
 | 
						|
 | 
						|
	 public function editiIsFloor(){
 | 
						|
 | 
						|
	    $ids = array();
 | 
						|
 | 
						|
		$id = input('post.id/d');
 | 
						|
 | 
						|
		$ids = $this->getChild($id);
 | 
						|
 | 
						|
	 	$isFloor = input('post.isFloor/d')?1:0;
 | 
						|
 | 
						|
	 	$result = $this->where("catId in(".implode(',',$ids).")")->update(['isFloor' => $isFloor]);
 | 
						|
 | 
						|
	 	if(false !== $result){
 | 
						|
 | 
						|
	 		WSTClearAllCache();
 | 
						|
 | 
						|
	 		return WSTReturn("操作成功", 1);
 | 
						|
 | 
						|
	 	}else{
 | 
						|
 | 
						|
	 		return WSTReturn($this->getError(),-1);
 | 
						|
 | 
						|
	 	}
 | 
						|
 | 
						|
	 }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
	/**
 | 
						|
 | 
						|
	 * 修改分类名称
 | 
						|
 | 
						|
	 */
 | 
						|
 | 
						|
	public function editName(){
 | 
						|
 | 
						|
		$catName = input('catName');
 | 
						|
 | 
						|
		if($catName=='')return WSTReturn("操作失败,商品分类名称不能为空");
 | 
						|
 | 
						|
		if(mb_strlen($catName)>20)return WSTReturn('商品分类名称不能超过20个字'.mb_strlen($catName));
 | 
						|
 | 
						|
		$id = (int)input('id');
 | 
						|
 | 
						|
		$result = $this->where("catId = ".$id)->update(['catName' => $catName]);
 | 
						|
 | 
						|
		if(false !== $result){
 | 
						|
 | 
						|
			WSTClearAllCache();
 | 
						|
 | 
						|
			return WSTReturn("操作成功", 1);
 | 
						|
 | 
						|
		}else{
 | 
						|
 | 
						|
			return WSTReturn($this->getError(),-1);
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
 | 
						|
	 * 修改分类排序
 | 
						|
 | 
						|
	 */
 | 
						|
 | 
						|
	public function editOrder(){
 | 
						|
 | 
						|
		$id = (int)input('id');
 | 
						|
 | 
						|
		$result = $this->where("catId = ".$id)->update(['catSort' => (int)input('catSort')]);
 | 
						|
 | 
						|
		if(false !== $result){
 | 
						|
 | 
						|
			WSTClearAllCache();
 | 
						|
 | 
						|
			return WSTReturn("操作成功", 1);
 | 
						|
 | 
						|
		}else{
 | 
						|
 | 
						|
			return WSTReturn($this->getError(),-1);
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
 | 
						|
	 * 显示是否自营显示/隐藏
 | 
						|
 | 
						|
	 */
 | 
						|
 | 
						|
	public function editiIsSelfShow(){
 | 
						|
 | 
						|
		$ids = array();
 | 
						|
 | 
						|
		$id = input('post.id/d');
 | 
						|
 | 
						|
		$ids = $this->getChild($id);
 | 
						|
 | 
						|
		$isSelfShow = input('post.isSelfShow/d')?1:0;
 | 
						|
 | 
						|
		Db::startTrans();
 | 
						|
 | 
						|
		try{
 | 
						|
 | 
						|
			$result = $this->where("catId in(".implode(',',$ids).")")->update(['isSelfShow' => $isSelfShow]);
 | 
						|
 | 
						|
			if(false !== $result){
 | 
						|
 | 
						|
				if($isSelfShow==0){
 | 
						|
 | 
						|
					//删除购物车里的相关商
 | 
						|
 | 
						|
					$goods = Db::name('goods g')->join('shops s','s.shopId=g.shopId')->where(["goodsCatId"=>['in',$ids],'isSale'=>1,'shopStatus'=>1,'s.isSelf'=>1])->field('goodsId')->select();
 | 
						|
 | 
						|
					if(count($goods)>0){
 | 
						|
 | 
						|
						$goodsIds = [];
 | 
						|
 | 
						|
						foreach ($goods as $key =>$v){
 | 
						|
 | 
						|
							$goodsIds[] = $v['goodsId'];
 | 
						|
 | 
						|
						}
 | 
						|
 | 
						|
						Db::name('carts')->where(['goodsId'=>['in',$goodsIds]])->delete();
 | 
						|
 | 
						|
					}
 | 
						|
 | 
						|
					//把相关的商品下架了
 | 
						|
 | 
						|
					Db::name('goods g')->join('shops s','s.shopId=g.shopId')->where("goodsCatId in(".implode(',',$ids).") and s.isSelf=1")->update(['g.isSale' => 0]);
 | 
						|
 | 
						|
 | 
						|
 | 
						|
					WSTClearAllCache();
 | 
						|
 | 
						|
				}
 | 
						|
 | 
						|
			}
 | 
						|
 | 
						|
			Db::commit();
 | 
						|
 | 
						|
			return WSTReturn("操作成功", 1);
 | 
						|
 | 
						|
		}catch (\Exception $e) {
 | 
						|
 | 
						|
			Db::rollback();errLog($e);
 | 
						|
 | 
						|
			return WSTReturn('操作失败',-1);
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
 | 
						|
	 * 显示是否显示/隐藏
 | 
						|
 | 
						|
	 */
 | 
						|
 | 
						|
	public function editiIsShow(){
 | 
						|
 | 
						|
		$ids = array();
 | 
						|
 | 
						|
		$id = input('post.id/d');
 | 
						|
 | 
						|
		$ids = $this->getChild($id);
 | 
						|
 | 
						|
		$isShow = input('post.isShow/d')?1:0;
 | 
						|
 | 
						|
		Db::startTrans();
 | 
						|
 | 
						|
        try{
 | 
						|
 | 
						|
			$result = $this->where("catId in(".implode(',',$ids).")")->update(['isShow' => $isShow]);
 | 
						|
 | 
						|
			if(false !== $result){
 | 
						|
 | 
						|
				if($isShow==0){
 | 
						|
 | 
						|
					//删除购物车里的相关商品
 | 
						|
 | 
						|
					$goods = Db::name('goods g')->join('shops s','s.shopId=g.shopId')->where(["goodsCatId"=>['in',$ids],'isSale'=>1,'s.isSelf'=>0])->field('goodsId')->select();
 | 
						|
 | 
						|
					if(count($goods)>0){
 | 
						|
 | 
						|
						$goodsIds = [];
 | 
						|
 | 
						|
						foreach ($goods as $key =>$v){
 | 
						|
 | 
						|
							$goodsIds[] = $v['goodsId'];
 | 
						|
 | 
						|
						}
 | 
						|
 | 
						|
						Db::name('carts')->where(['goodsId'=>['in',$goodsIds]])->delete();
 | 
						|
 | 
						|
					}
 | 
						|
 | 
						|
					//把相关的商品下架了
 | 
						|
 | 
						|
					Db::name('goods g')->join('shops s','s.shopId=g.shopId')->where("goodsCatId in(".implode(',',$ids).") and s.isSelf=0")->update(['g.isSale' => 0]);
 | 
						|
 | 
						|
					WSTClearAllCache();
 | 
						|
 | 
						|
				}
 | 
						|
 | 
						|
		    }
 | 
						|
 | 
						|
		    Db::commit();
 | 
						|
 | 
						|
	        return WSTReturn("操作成功", 1);
 | 
						|
 | 
						|
        }catch (\Exception $e) {
 | 
						|
 | 
						|
            Db::rollback();errLog($e);
 | 
						|
 | 
						|
            return WSTReturn('操作失败',-1);
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
			
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	
 | 
						|
 | 
						|
	/**
 | 
						|
 | 
						|
	 * 新增
 | 
						|
 | 
						|
	 */
 | 
						|
 | 
						|
	public function add(){
 | 
						|
 | 
						|
		$parentId = input('post.parentId/d');
 | 
						|
 | 
						|
		$data = input('post.');
 | 
						|
 | 
						|
		WSTUnset($data,'catId,dataFlag');
 | 
						|
 | 
						|
		$data['parentId'] = $parentId;
 | 
						|
 | 
						|
		$data['createTime'] = date('Y-m-d H:i:s');
 | 
						|
 | 
						|
		$result = $this->validate('GoodsCats.add')->allowField(true)->save($data);
 | 
						|
 | 
						|
		if(false !== $result){
 | 
						|
 | 
						|
			WSTClearAllCache();
 | 
						|
 | 
						|
			return WSTReturn("新增成功", 1);
 | 
						|
 | 
						|
		}else{
 | 
						|
 | 
						|
			return WSTReturn($this->getError(),-1);
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	
 | 
						|
 | 
						|
	/**
 | 
						|
 | 
						|
	 * 编辑
 | 
						|
 | 
						|
	 */
 | 
						|
 | 
						|
	public function edit(){
 | 
						|
 | 
						|
		$catId = input('post.id/d');
 | 
						|
 | 
						|
		$data = input('post.');
 | 
						|
 | 
						|
		WSTUnset($data,'catId,dataFlag,createTime');
 | 
						|
 | 
						|
		$result = $this->validate('GoodsCats.edit')->allowField(true)->save($data,['catId'=>$catId]);
 | 
						|
 | 
						|
		$ids = array();
 | 
						|
 | 
						|
		$ids = $this->getChild($catId);
 | 
						|
 | 
						|
		$this->where("catId in(".implode(',',$ids).")")->update(['isShow' => (int)$data['isShow'],'isFloor'=> $data['isFloor'],'commissionRate'=>(float)$data['commissionRate'],'payDeposit'=>(float)$data['payDeposit']]);
 | 
						|
 | 
						|
		if(false !== $result){
 | 
						|
 | 
						|
			if($data['isShow']==0){
 | 
						|
 | 
						|
				//删除购物车里的相关商品
 | 
						|
 | 
						|
				$goods = Db::name('goods')->where(["goodsCatId"=>['in',$ids],'isSale'=>1])->field('goodsId')->select();
 | 
						|
 | 
						|
				if(count($goods)>0){
 | 
						|
 | 
						|
					$goodsIds = [];
 | 
						|
 | 
						|
					foreach ($goods as $key =>$v){
 | 
						|
 | 
						|
							$goodsIds[] = $v['goodsId'];
 | 
						|
 | 
						|
					}
 | 
						|
 | 
						|
					Db::name('carts')->where(['goodsId'=>['in',$goodsIds]])->delete();
 | 
						|
 | 
						|
				}
 | 
						|
 | 
						|
		    	//把相关的商品下架了
 | 
						|
 | 
						|
		        Db::name('goods')->where("goodsCatId in(".implode(',',$ids).")")->update(['isSale' => 0]);
 | 
						|
 | 
						|
		        WSTClearAllCache();
 | 
						|
 | 
						|
			}
 | 
						|
 | 
						|
			return WSTReturn("修改成功", 1);
 | 
						|
 | 
						|
		}else{
 | 
						|
 | 
						|
			return WSTReturn($this->getError(),-1);
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	
 | 
						|
 | 
						|
	/**
 | 
						|
 | 
						|
	 * 删除
 | 
						|
 | 
						|
	 */
 | 
						|
 | 
						|
	public function del(){
 | 
						|
 | 
						|
		$ids = array();
 | 
						|
 | 
						|
		$id = input('post.id/d');
 | 
						|
 | 
						|
		$ids = $this->getChild($id);
 | 
						|
 | 
						|
		Db::startTrans();
 | 
						|
 | 
						|
        try{
 | 
						|
 | 
						|
		    $data = [];
 | 
						|
 | 
						|
		    $data['dataFlag'] = -1;
 | 
						|
 | 
						|
		    $result = $this->where(['catId'=>['in',$ids]])->update($data);
 | 
						|
 | 
						|
		    if(false !== $result){
 | 
						|
 | 
						|
		        //删除购物车里的相关商品
 | 
						|
 | 
						|
				$goods = Db::name('goods')->where(["goodsCatId"=>['in',$ids],'isSale'=>1])->field('goodsId')->select();
 | 
						|
 | 
						|
				if(count($goods)>0){
 | 
						|
 | 
						|
					$goodsIds = [];
 | 
						|
 | 
						|
					foreach ($goods as $key =>$v){
 | 
						|
 | 
						|
							$goodsIds[] = $v['goodsId'];
 | 
						|
 | 
						|
					}
 | 
						|
 | 
						|
					Db::name('carts')->where(['goodsId'=>['in',$goodsIds]])->delete();
 | 
						|
 | 
						|
				}
 | 
						|
 | 
						|
				//删除商品属性
 | 
						|
 | 
						|
				Db::name('attributes')->where("goodsCatId in(".implode(',',$ids).")")->update(['dataFlag'=>-1]);
 | 
						|
 | 
						|
		    	//删除商品规格
 | 
						|
 | 
						|
				Db::name('spec_cats')->where("goodsCatId in(".implode(',',$ids).")")->update(['dataFlag'=>-1]);
 | 
						|
 | 
						|
		    	//把相关的商品下架了
 | 
						|
 | 
						|
		        Db::name('goods')->where("goodsCatId in(".implode(',',$ids).")")->update(['isSale' => 0]);
 | 
						|
 | 
						|
		        WSTClearAllCache();
 | 
						|
 | 
						|
		    }
 | 
						|
 | 
						|
            Db::commit();
 | 
						|
 | 
						|
	        return WSTReturn("删除成功", 1);
 | 
						|
 | 
						|
        }catch (\Exception $e) {
 | 
						|
 | 
						|
            Db::rollback();errLog($e);
 | 
						|
 | 
						|
            return WSTReturn('删除失败',-1);
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	
 | 
						|
 | 
						|
    /**
 | 
						|
 | 
						|
	 * 根据子分类获取其父级分类
 | 
						|
 | 
						|
	 */
 | 
						|
 | 
						|
	public function getParentIs($id,$data = array()){
 | 
						|
 | 
						|
		$data[] = $id;
 | 
						|
 | 
						|
		$parentId = $this->where('catId',$id)->value('parentId');
 | 
						|
 | 
						|
		if($parentId==0){
 | 
						|
 | 
						|
			krsort($data);
 | 
						|
 | 
						|
			return $data;
 | 
						|
 | 
						|
		}else{
 | 
						|
 | 
						|
			return $this->getParentIs($parentId, $data);
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
} |