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