01 day

it2022-05-09  39

1 <?php 2 namespace Admin\Model; 3 use Think\Model; 4 class GoodsModel extends Model { 5 6 protected $insertFields='goods_name,shop_price,is_on_sale,market_price,logo,goods_desc,brand_id,cat_id,type_id,promote_start_date,promote_end_date,promote_price,is_new,is_hos,is_best,sord,is_foot'; 7 protected $updateFields='id,goods_name,shop_price,is_on_sale,market_price,logo,goods_desc,brand_id,cat_id,type_id,promote_start_date,promote_end_date,promote_price,is_new,is_hos,is_best,sord,is_foot'; 8 9 protected $_validate = array( 10 array('goods_name','require','商品名称不能为空',1,), 11 array('shop_price','currency','商品价格必需为货币类型',1,), 12 array('market_price','currency','市场价格必需为货币类型',1,), 13 array('cat_id','currency','分类不能为空',1,), 14 ); 15 16 protected function _before_insert(&$data, $options){ 17 if($_FILES['logo']['error']==0){ 18 $upload = new \Think\Upload();// 实例化上传类 19 $upload->maxSize = 1024*1024 ;// 设置附件上传大小 20 $upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型 21 $upload->rootPath = './Public/Uploads/'; // 设置附件上传根目录 22 $upload->savePath = 'goods/'; // 设置附件上传(子)目录 23 // 上传文件 24 $info = $upload->upload(); 25 // var_dump($info);die; 26 if(!$info) {// 上传错误提示错误信息 27 $this->error=$upload->getError(); 28 return false; 29 }else{// 上传成功 30 //原图片路径 31 $logo = $info['logo']['savepath'].$info['logo']['savename']; 32 //缩略图路径 33 $mbig_logo = $info['logo']['savepath'].'mbig_'.$info['logo']['savename']; 34 $big_logo = $info['logo']['savepath'].'big_'.$info['logo']['savename']; 35 $mid_logo = $info['logo']['savepath'].'mid_'.$info['logo']['savename']; 36 $sm_logo = $info['logo']['savepath'].'sm_'.$info['logo']['savename']; 37 $image = new \Think\Image(); 38 $image->open('./Public/Uploads/'.$logo); 39 // 按照原图的比例生成一个最大为150*150的缩略图并保存为thumb.jpg 40 $image->thumb(700,700)->save('./Public/Uploads/'.$mbig_logo); 41 $image->thumb(300,300)->save('./Public/Uploads/'.$big_logo); 42 $image->thumb(150,150)->save('./Public/Uploads/'.$mid_logo); 43 $image->thumb(50,50)->save('./Public/Uploads/'.$sm_logo); 44 $data['logo'] = $logo; 45 $data['mbig_logo'] = $mbig_logo; 46 $data['big_logo'] = $big_logo; 47 $data['mid_logo'] = $mid_logo; 48 $data['sm_logo'] = $sm_logo; 49 } 50 } 51 $data['addtime'] = date('Y-m-d H:i:s'); 52 $data['goods_desc'] = removeXSS($data['goods_desc']); 53 } 54 55 protected function _after_insert($data, $options){ 56 $id = $data['id']; 57 /******************商品属性*********************/ 58 $goodsattr = I('post.attr_value_box'); 59 $gaModel = D('goods_attr'); 60 if($goodsattr){ 61 foreach ($goodsattr as $k=>$v){ 62 $v = array_unique($v); 63 foreach ($v as $k1=>$v1){ 64 if($v1=='') 65 continue; 66 $gaModel->add(array( 67 'attr_id'=>$k, 68 'goods_id'=>$id, 69 'attr_value'=>$v1 70 )); 71 } 72 } 73 } 74 75 /******************扩展分类******************/ 76 $cbModle = D('category_box'); 77 $cib = I('post.cat_id_box'); 78 $cib = array_unique($cib); 79 foreach ($cib as $k=>$v){ 80 if($v==0) 81 continue; 82 $cbModle->add(array( 83 'cat_id'=>$v, 84 'goods_id'=>$id, 85 )); 86 } 87 88 /***************商品相册*********************/ 89 $gpModle = D('goods_pic'); 90 if($_FILES['pic']){ 91 $pic = array(); 92 foreach ($_FILES['pic']['error'] as $k=>$v){ 93 if($v != 0) 94 continue; 95 $pic[] = array( 96 'name'=>$_FILES['pic']['name'][$k], 97 'type'=>$_FILES['pic']['type'][$k], 98 'tmp_name'=>$_FILES['pic']['tmp_name'][$k], 99 'error'=>$v, 100 'size'=>$_FILES['pic']['size'][$k], 101 ); 102 } 103 $_FILES = $pic;//$pic传得是文件; 104 foreach ($pic as $k=>$v){ 105 $upload = new \Think\Upload();// 实例化上传类 106 $upload->maxSize = 1024*1024 ;// 设置附件上传大小 107 $upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型 108 $upload->rootPath = './Public/Uploads/'; // 设置附件上传根目录 109 $upload->savePath = 'goods_pic/'; // 设置附件上传(子)目录 110 // 上传文件 111 $info = $upload->upload(array($k=>$_FILES[$k])); 112 if(!$info) {// 上传错误提示错误信息 113 $this->error=$upload->getError(); 114 return false; 115 }else{// 上传成功 116 //原图片路径 117 $pic = $info[$k]['savepath'].$info[$k]['savename']; 118 //缩略图路径 119 $big_pic = $info[$k]['savepath'].'big_'.$info[$k]['savename']; 120 $mid_pic = $info[$k]['savepath'].'mid_'.$info[$k]['savename']; 121 $sm_pic = $info[$k]['savepath'].'sm_'.$info[$k]['savename']; 122 $image = new \Think\Image(); 123 $image->open('./Public/Uploads/'.$pic); 124 // 按照原图的比例生成一个最大为150*150的缩略图并保存为thumb.jpg 125 $image->thumb(700,700)->save('./Public/Uploads/'.$big_pic); 126 $image->thumb(300,300)->save('./Public/Uploads/'.$mid_pic); 127 $image->thumb(50,50)->save('./Public/Uploads/'.$sm_pic); 128 $gpModle->add(array( 129 'goods_id'=>$id, 130 'pic'=>$pic, 131 'sm_pic'=>$sm_pic, 132 'mid_pic'=>$mid_pic, 133 'big_pic'=>$big_pic, 134 )); 135 } 136 } 137 } 138 139 /***********会员价格*************/ 140 $plData = I('post.price_level'); 141 $mpModel = D('member_price'); 142 if($plData){ 143 foreach ($plData as $k=>$v){ 144 if($v<=0) 145 continue; 146 $mpModel->add(array( 147 'price'=>$v, 148 'level_id'=>$k, 149 'goods_id'=>$id 150 )); 151 } 152 } 153 154 } 155 156 protected function _before_update(&$data, $options){ 157 $id = $options['where']['id']; 158 /******************商品属性******************/ 159 $goodsattr = I('post.attr_value_box'); 160 $goodsAttrId = I('post.goods_attr_id'); 161 $gaModel = D('goods_attr'); 162 $num = 0; 163 if($goodsattr){ 164 foreach ($goodsattr as $k=>$v){ 165 foreach ($v as $k1=>$v1){ 166 if($goodsAttrId[$num]==""){ 167 $gaModel->add(array( 168 'goods_id'=>$id, 169 'attr_id'=>$k, 170 'attr_value'=>$v1, 171 )); 172 }else{ 173 $gaModel->where(array( 174 'id'=>$goodsAttrId[$num], 175 ))->setField('attr_value',$v1); 176 } 177 $num++; 178 } 179 } 180 } 181 182 /******************扩展分类******************/ 183 $cbModle = D('category_box'); 184 $cib = I('post.cat_id_box'); 185 if($cib){ 186 $cbModle->where(array( 187 'goods_id'=>$id, 188 ))->delete(); 189 190 $cib = array_unique($cib); 191 foreach ($cib as $k=>$v){ 192 if($v==0) 193 continue; 194 $cbModle->add(array( 195 'cat_id'=>$v, 196 'goods_id'=>$id, 197 )); 198 } 199 } 200 /***************相册**********************/ 201 $gpModle = D('goods_pic'); 202 if($_FILES['pic']){ 203 $pic = array(); 204 foreach ($_FILES['pic']['error'] as $k=>$v){ 205 if($v != 0) 206 continue; 207 $pic[] = array( 208 'name'=>$_FILES['pic']['name'][$k], 209 'type'=>$_FILES['pic']['type'][$k], 210 'tmp_name'=>$_FILES['pic']['tmp_name'][$k], 211 'error'=>$v, 212 'size'=>$_FILES['pic']['size'][$k], 213 ); 214 } 215 $_FILES = $pic;//$pic传得是文件; 216 foreach ($pic as $k=>$v){ 217 $upload = new \Think\Upload();// 实例化上传类 218 $upload->maxSize = 1024*1024 ;// 设置附件上传大小 219 $upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型 220 $upload->rootPath = './Public/Uploads/'; // 设置附件上传根目录 221 $upload->savePath = 'goods_pic/'; // 设置附件上传(子)目录 222 // 上传文件 223 $info = $upload->upload(array($k=>$_FILES[$k])); 224 if(!$info) {// 上传错误提示错误信息 225 $this->error=$upload->getError(); 226 return false; 227 }else{// 上传成功 228 //原图片路径 229 $pic = $info[$k]['savepath'].$info[$k]['savename']; 230 //缩略图路径 231 $big_pic = $info[$k]['savepath'].'big_'.$info[$k]['savename']; 232 $mid_pic = $info[$k]['savepath'].'mid_'.$info[$k]['savename']; 233 $sm_pic = $info[$k]['savepath'].'sm_'.$info[$k]['savename']; 234 $image = new \Think\Image(); 235 $image->open('./Public/Uploads/'.$pic); 236 // 按照原图的比例生成一个最大为150*150的缩略图并保存为thumb.jpg 237 $image->thumb(700,700)->save('./Public/Uploads/'.$big_pic); 238 $image->thumb(300,300)->save('./Public/Uploads/'.$mid_pic); 239 $image->thumb(50,50)->save('./Public/Uploads/'.$sm_pic); 240 $gpModle->add(array( 241 'goods_id'=>$id, 242 'pic'=>$pic, 243 'sm_pic'=>$sm_pic, 244 'mid_pic'=>$mid_pic, 245 'big_pic'=>$big_pic, 246 )); 247 } 248 } 249 } 250 251 252 253 /***************相片**********************/ 254 if($_FILES['logo']['error']==0){ 255 $upload = new \Think\Upload();// 实例化上传类 256 $upload->maxSize = 1024*1024 ;// 设置附件上传大小 257 $upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型 258 $upload->rootPath = './Public/Uploads/'; // 设置附件上传根目录 259 $upload->savePath = 'goods/'; // 设置附件上传(子)目录 260 // 上传文件 261 $info = $upload->upload(); 262 // var_dump($info);die; 263 if(!$info) {// 上传错误提示错误信息 264 $this->error=$upload->getError(); 265 return false; 266 }else{// 上传成功 267 //原图片路径 268 $logo = $info['logo']['savepath'].$info['logo']['savename']; 269 //缩略图路径 270 $mbig_logo = $info['logo']['savepath'].'mbig_'.$info['logo']['savename']; 271 $big_logo = $info['logo']['savepath'].'big_'.$info['logo']['savename']; 272 $mid_logo = $info['logo']['savepath'].'mid_'.$info['logo']['savename']; 273 $sm_logo = $info['logo']['savepath'].'sm_'.$info['logo']['savename']; 274 $image = new \Think\Image(); 275 $image->open('./Public/Uploads/'.$logo); 276 // 按照原图的比例生成一个最大为150*150的缩略图并保存为thumb.jpg 277 $image->thumb(700,700)->save('./Public/Uploads/'.$mbig_logo); 278 $image->thumb(300,300)->save('./Public/Uploads/'.$big_logo); 279 $image->thumb(150,150)->save('./Public/Uploads/'.$mid_logo); 280 $image->thumb(50,50)->save('./Public/Uploads/'.$sm_logo); 281 $oldLogo = $this->field('logo,sm_logo,mid_logo,big_logo,mbig_logo')->find($id); 282 unlink('./Public/Uploads/'.$oldLogo['logo']); 283 unlink('./Public/Uploads/'.$oldLogo['sm_logo']); 284 unlink('./Public/Uploads/'.$oldLogo['mid_logo']); 285 unlink('./Public/Uploads/'.$oldLogo['big_logo']); 286 unlink('./Public/Uploads/'.$oldLogo['mbig_logo']); 287 $data['logo'] = $logo; 288 $data['mbig_logo'] = $mbig_logo; 289 $data['big_logo'] = $big_logo; 290 $data['mid_logo'] = $mid_logo; 291 $data['sm_logo'] = $sm_logo; 292 } 293 } 294 295 /***************会员价格**********************/ 296 $mpModel = D('member_price'); 297 $plData = I('post.price_level'); 298 if($plData){ 299 $mpModel->where(array( 300 'goods_id'=>$id, 301 ))->delete(); 302 foreach ($plData as $k=>$v){ 303 if($v<=0) 304 continue; 305 $mpModel->add(array( 306 'price'=>$v, 307 'level_id'=>$k, 308 'goods_id'=>$id 309 )); 310 } 311 } 312 313 314 315 /***************时间和描述XSS**********************/ 316 $data['goods_desc'] = removeXSS($data['goods_desc']); 317 } 318 319 /************一个分类id下包含子分类扩展分类所有的商品id*******/ 320 public function getCatGOodsId($catId){ 321 $catModel = D('Admin/Category'); 322 $cats = $catModel->getchildCate($catId);//取出所有的子分类的id 323 $cats[] = $catId; 324 //取出商品id 325 $gId = $this->field('id')->where(array( 326 'cat_id'=>array('in',$cats), 327 ))->select(); 328 //取出扩展分类 329 $cbModel = D('category_box'); 330 $gIds = $cbModel->field('distinct goods_id id')->where(array( 331 'cat_id'=>array('in',$cats), 332 ))->select(); 333 if($gId && $gIds){ 334 $gId = array_merge($gId,$gIds); 335 }elseif ($gIds){ 336 $gId = $gIds; 337 } 338 $arr = array(); 339 foreach ($gId as $k=>$v){ 340 if(!in_array($v['id'], $arr)) 341 $arr[] = $v['id']; 342 } 343 return $arr; 344 } 345 protected function _before_delete($options){ 346 $id = $options['where']['id']; 347 /*****************库存量************************/ 348 $gnModel = D('goods_number'); 349 $gnModel->where(array( 350 'goods_id'=>$id, 351 ))->delete(); 352 /*****************商品属性************************/ 353 $gaModel = D('goods_attr'); 354 $gaModel->where(array( 355 'goods_id'=>$id, 356 ))->delete(); 357 358 /*****************扩展分类************************/ 359 $cbModle = D('category_box'); 360 $cbModle->where(array( 361 'goods_id'=>$id, 362 ))->delete(); 363 /***************商品相册*********************/ 364 $gpModle = D('goods_pic'); 365 $oldPic = $gpModle->field('pic,sm_pic,mid_pic,big_pic') 366 ->where(array( 367 'goods_id'=>$id, 368 ))->select(); 369 foreach ($oldPic as $k=>$v){ 370 unlink('./Public/Uploads/'.$v['pic']); 371 unlink('./Public/Uploads/'.$v['sm_pic']); 372 unlink('./Public/Uploads/'.$v['mid_pic']); 373 unlink('./Public/Uploads/'.$v['big_pic']); 374 } 375 $gpModle->where(array( 376 'goods_id'=>$id, 377 ))->delete(); 378 379 /***************会员价格**********************/ 380 $mpModel = D('member_price'); 381 $mpModel->where(array( 382 'goods_id'=>$id, 383 ))->delete(); 384 /***************相片**********************/ 385 $oldLogo = $this->field('logo,sm_logo,mid_logo,big_logo,mbig_logo')->find($id); 386 unlink('./Public/Uploads/'.$oldLogo['logo']); 387 unlink('./Public/Uploads/'.$oldLogo['sm_logo']); 388 unlink('./Public/Uploads/'.$oldLogo['mid_logo']); 389 unlink('./Public/Uploads/'.$oldLogo['big_logo']); 390 unlink('./Public/Uploads/'.$oldLogo['mbig_logo']); 391 } 392 393 public function search($pagecount=5){ 394 $where = array(); 395 //商品名称 396 $gn = I('get.gn'); 397 if($gn) 398 $where['a.goods_name'] = array('like',"%$gn%"); 399 //价格 400 $pt = I('get.pt'); 401 $pf = I('get.pf'); 402 if($pt && $pf) 403 $where['a.shop_price'] = array('between',array($pt,$pf)); 404 elseif($pt) 405 $where['a.shop_price'] = array('egt',$pt); 406 elseif ($pf) 407 $where['a.shop_price'] = array('elt',$pf); 408 //时间 409 $tt = I('get.tt'); 410 $tf = I('get.tf'); 411 if($tt && $tf) 412 $where['a.addtime'] = array('between',array($tt,$tf)); 413 elseif ($tt) 414 $where['a.addtime'] = array('eqt',$tt); 415 elseif ($tf) 416 $where['a.addtime'] = array('elt',$tf); 417 //上下架 418 $ios = I('get.ios'); 419 if($ios) 420 $where['a.is_on_sale'] = array('eq',$ios); 421 //品牌 422 $bn = I('get.bn'); 423 if($bn) 424 $where['a.brand_id'] = array('eq',$bn); 425 //分类 426 $catId = I('get.cat_id'); 427 // var_dump($catId);die; 428 if($catId>0){ 429 $goodsId = $this->getCatGOodsId($catId); 430 $where['a.id'] = array('in',$goodsId); 431 } 432 433 //排序 434 $paixu = I('get.paixu'); 435 $name = 'id'; 436 $pai = 'desc'; 437 if($paixu){ 438 if($paixu=='paixuIdasc') 439 $pai = 'asc'; 440 elseif ($paixu == 'paixuPricedesc') 441 $name = 'shop_price'; 442 elseif ($paixu == 'paixuPriceasc'){ 443 $name = 'shop_price'; 444 $pai = 'asc'; 445 } 446 } 447 448 $count = $this->alias('a')->where($where)->count();// 查询满足要求的总记录数 449 $Page = new \Think\Page($count,$pagecount);// 实例化分页类 传入总记录数和每页显示的记录数(25) 450 $Page->setConfig('next','下一页'); 451 $Page->setConfig('prev','上一页'); 452 $show = $Page->show();// 分页显示输出 453 // 进行分页数据查询 注意limit方法的参数要使用Page类的属性 454 $list = $this->where($where)->limit($Page->firstRow.','.$Page->listRows) 455 ->alias('a') 456 ->field('a.*,b.brand_name,c.cat_name,GROUP_CONCAT(e.cat_name) cat_name_box') 457 ->join('LEFT JOIN __BRAND__ b on a.brand_id=b.id') 458 ->join('LEFT JOIN __CATEGORY__ c on a.cat_id=c.id') 459 ->join('LEFT JOIN __CATEGORY_BOX__ d on a.id=d.goods_id') 460 ->join('LEFT JOIN __CATEGORY__ e on e.id=d.cat_id') 461 ->order("$name $pai") 462 ->group('a.id') 463 ->select(); 464 return array( 465 'data' =>$list, 466 'page'=>$show); 467 } 468 469 470 //取得促销价格信息; 471 public function zhuxiaoInfo(){ 472 $date = date('Y-m-d H:i:s'); 473 $data = $this->field('promote_price,goods_name,mid_logo,id')->where(array( 474 'promote_start_date'=>array('elt',$date), 475 'promote_end_date'=>array('egt',$date), 476 'promote_price'=>array('gt',0), 477 'is_on_sale'=>'是' 478 ))->order('sord asc')->limit(5)->select(); 479 return $data; 480 } 481 482 483 484 //取得热销信息 485 public function horBeseInfo($bnt){ 486 $data = $this->field('shop_price,goods_name,mid_logo,id')->where(array( 487 'shop_price'=>array('gt',0), 488 "$bnt"=>array('eq','是'), 489 'is_on_sale'=>'是' 490 ))->order('sord asc')->limit(5)->select(); 491 return $data; 492 } 493 494 495 //计算最终价格 496 public function besePriceInfo($goods_id){ 497 $level = session('level'); 498 $date = date('Y-m-d H:i:s'); 499 $promote_price = $data = $this->field('promote_price')->where(array( 500 'promote_start_date'=>array('elt',$date), 501 'promote_end_date'=>array('egt',$date), 502 'promote_price'=>array('gt',0), 503 'goods_id'=>$goods_id, 504 'is_on_sale'=>'是' 505 ))->find(); 506 //有没有登录 507 if($level){ 508 //会员价格 登录了才有会员价格 509 $mpMdoel = D('member_price'); 510 $mpData = $mpMdoel->where(array( 511 'goods_id'=>$goods_id, 512 'level_id'=>$level, 513 'price'=>array('gt',0) 514 ))->find(); 515 if($mpData){ 516 return min($promote_price['promote_price'],$mpData['price']); 517 }else{ 518 $gData = $this->field('shop_price')->where(array( 519 'id'=>$goods_id, 520 ))->find(); 521 return min($promote_price['promote_price'],$gData['shop_price']); 522 } 523 }else{ 524 $gData = $this->field('shop_price')->where(array( 525 'id'=>$goods_id, 526 ))->find(); 527 if($promote_price['promote_price']) 528 return min($promote_price['promote_price'],$gData['shop_price']); 529 else 530 return $gData['shop_price']; 531 } 532 } 533 534 535 public function getSearchInfo($Carid,$pagecount=4){ 536 $GoodsId = $this->getCatGOodsId($Carid);//所有的商品id 537 $where['a.id']=array('in',$GoodsId); 538 /*************************品牌***************************/ 539 $brandId = I('get.brand_id'); 540 if($brandId){ 541 $bid = strstr($brandId, '-'); 542 $bId = str_replace($bid, '', $brandId); 543 // $bId = (int)$brandId; 544 $where['a.brand_id'] = array('eq',$bId); 545 } 546 /*************************价格***************************/ 547 $price = I('get.price'); 548 if($price){ 549 $pri = explode('-', $price); 550 $where['a.shop_price'] = array('between',array($pri[0],$pri[1])); 551 } 552 /*************************属性***************************/ 553 $array = null; 554 foreach ($_GET as $k=>$v){ 555 if(strpos($k,'attr_')===0){ 556 //属性id 557 $attId = str_replace('attr_', '',$k); 558 //属性值 559 $attr_value = str_replace(strrchr($v,'-'),'',$v); 560 561 $gaModel = D('goods_attr'); 562 $id = $gaModel->field('GROUP_CONCAT(goods_id) gids')->where(array( 563 'attr_value'=>$attr_value, 564 'attr_id'=>$attId, 565 ))->find(); 566 //如果有商品id 567 if($id['gids']){ 568 $id['gids'] = explode(',', $id['gids']); 569 if($array == null) 570 $array = $id['gids']; 571 else{ 572 $array = array_intersect($array, $id['gids']); 573 if(empty($array)){ 574 $where['a.id'] = array('eq',0); 575 break; 576 } 577 } 578 }else{ 579 $array = array(); 580 $where['a.id'] = array('eq',0); 581 break; 582 } 583 } 584 } 585 if($array) 586 $where['a.id'] = array('IN',$array); 587 588 /***********************分页*****************************/ 589 $count = $this->alias('a')->where($where)->count();// 查询满足要求的总记录数 590 $Page = new \Think\Page($count,$pagecount);// 实例化分页类 传入总记录数和每页显示的记录数(25) 591 $Page->setConfig('next','下一页'); 592 $Page->setConfig('prev','上一页'); 593 $data['pate'] = $Page->show();// 分页显示输出 594 /***********************数据*****************************/ 595 $data['data'] = $this->alias('a') 596 ->field('a.id,a.goods_name,a.shop_price,a.mid_logo,a.id,sum(b.goods_number) X1') 597 ->join('LEFT JOIN __ORDER_GOODS__ b 598 on (a.id=b.goods_id 599 and 600 b.order_id in(select id from guo_order where pay_status="是"))') 601 ->group('a.id') 602 ->order('X1 desc') 603 ->where($where)->limit($Page->firstRow.','.$Page->listRows) 604 ->select(); 605 return $data; 606 } 607 608 }

 

转载于:https://www.cnblogs.com/guoshipeng/p/8003566.html


最新回复(0)