You've already forked qlg.tsgz.moe
							
							
		
			
				
	
	
		
			230 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			230 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
<?php
 | 
						|
namespace wstmart\common\model;
 | 
						|
use think\Db;
 | 
						|
/**
 | 
						|
 * ============================================================================
 | 
						|
 * 商品类
 | 
						|
 */
 | 
						|
class Goods extends Base{
 | 
						|
	/**
 | 
						|
	 * 获取店铺商品列表
 | 
						|
	 */
 | 
						|
	public function shopGoods($shopId){
 | 
						|
		$msort = input("param.msort/d");
 | 
						|
		$mdesc = input("param.mdesc/d");
 | 
						|
		$order = array('g.saleTime'=>'desc');
 | 
						|
		$orderFile = array('1'=>'g.isHot','2'=>'g.saleNum','3'=>'g.shopPrice','4'=>'g.shopPrice','5'=>'(gs.totalScore/gs.totalUsers)','6'=>'g.saleTime');
 | 
						|
		$orderSort = array('0'=>'asc','1'=>'desc');
 | 
						|
		if($msort>0){
 | 
						|
			$order = array($orderFile[$msort]=>$orderSort[$mdesc]);
 | 
						|
		}
 | 
						|
		$goodsName = input("param.goodsName");//搜索店鋪名
 | 
						|
		$words = $where = $where2 = $where3 = $where4 = [];
 | 
						|
		if($goodsName!=""){
 | 
						|
			$words = explode(" ",$goodsName);
 | 
						|
		}
 | 
						|
		if(!empty($words)){
 | 
						|
			$sarr = array();
 | 
						|
			foreach ($words as $key => $word) {
 | 
						|
				if($word!=""){
 | 
						|
					$sarr[] = "g.goodsName like '%$word%'";
 | 
						|
				}
 | 
						|
			}
 | 
						|
			$where4 = implode(" or ", $sarr);
 | 
						|
		}
 | 
						|
		$sprice = input("param.sprice");//开始价格
 | 
						|
		$eprice = input("param.eprice");//结束价格
 | 
						|
		if($sprice!="")$where2 = "g.shopPrice >= ".(float)$sprice;
 | 
						|
		if($eprice!="")$where3 = "g.shopPrice <= ".(float)$eprice;
 | 
						|
		$ct1 = input("param.ct1/d");
 | 
						|
		$ct2 = input("param.ct2/d");
 | 
						|
		if($ct1>0)$where['shopCatId1'] = $ct1;
 | 
						|
		if($ct2>0)$where['shopCatId2'] = $ct2;
 | 
						|
		$goods = Db::name('goods')->alias('g')
 | 
						|
		->join('__GOODS_SCORES__ gs','gs.goodsId = g.goodsId','left')
 | 
						|
		->where(['g.shopId'=>$shopId,'g.isSale'=>1,'g.goodsStatus'=>1,'g.dataFlag'=>1])
 | 
						|
		->where($where)->where($where2)->where($where3)->where($where4)
 | 
						|
		->field('g.goodsId,g.goodsName,g.goodsImg,g.shopPrice,g.marketPrice,g.saleNum,g.appraiseNum,g.goodsStock,g.isFreeShipping,g.saleTime,gallery')//添加上架时间 mark 20170103
 | 
						|
		->order($order)
 | 
						|
		->paginate(input('pagesize/d'))->toArray();
 | 
						|
		return  $goods;
 | 
						|
	}
 | 
						|
	/**
 | 
						|
	 * 新增商品
 | 
						|
	 */
 | 
						|
	public function goodsAdd(){
 | 
						|
		$shopId = (int)input('post.shopId');
 | 
						|
		$data = input('post.');
 | 
						|
		$specsIds = input('post.specsIds');
 | 
						|
		$basicsMoney = isset($data['basicsMoney']) ? $data['basicsMoney'] : 0;
 | 
						|
		if(!is_numeric($basicsMoney)){
 | 
						|
			return WSTReturn("商品成本价请填写数字");
 | 
						|
		}
 | 
						|
		$aloneShop = false;//Db::name('alone_shops')->where(['shopId'=>$shopId,'dataFlag'=>1])->find();
 | 
						|
		// if($aloneShop && !$basicsMoney){
 | 
						|
		// 	return WSTReturn("请填写成本价");
 | 
						|
		// }
 | 
						|
		WSTUnset($data,'goodsId,statusRemarks,goodsStatus,dataFlag,basicsMoney');
 | 
						|
		if(isset($data['goodsName'])){
 | 
						|
			if(!WSTCheckFilterWords($data['goodsName'],WSTConf("CONF.limitWords"))){
 | 
						|
				return WSTReturn("商品名称包含非法字符");
 | 
						|
			}
 | 
						|
		}
 | 
						|
		if(isset($data['goodsTips'])){
 | 
						|
			if(!WSTCheckFilterWords($data['goodsTips'],WSTConf("CONF.limitWords"))){
 | 
						|
				return WSTReturn("商品促销信息包含非法字符");
 | 
						|
			}
 | 
						|
		}
 | 
						|
		if(isset($data['goodsDesc'])){
 | 
						|
			if(!WSTCheckFilterWords($data['goodsDesc'],WSTConf("CONF.limitWords"))){
 | 
						|
				return WSTReturn("商品描述包含非法字符");
 | 
						|
			}
 | 
						|
		}
 | 
						|
		if(WSTConf("CONF.isGoodsVerify")==1){
 | 
						|
			$data['goodsStatus'] = 0;
 | 
						|
		}else{
 | 
						|
			$data['goodsStatus'] = 1;
 | 
						|
		}
 | 
						|
		$data['shopId'] = $shopId;
 | 
						|
		$data['saleTime'] = date('Y-m-d H:i:s');
 | 
						|
		$data['createTime'] = date('Y-m-d H:i:s');
 | 
						|
		$goodsCats = model('GoodsCats')->getParentIs($data['goodsCatId']);		
 | 
						|
		$data['goodsCatIdPath'] = implode('_',$goodsCats)."_";
 | 
						|
		if($data['goodsType']==0){
 | 
						|
			$data['isSpec'] = ($specsIds!='')?1:0;
 | 
						|
		}else{
 | 
						|
			$data['isSpec'] = 0;
 | 
						|
		}
 | 
						|
		Db::startTrans();
 | 
						|
        try{
 | 
						|
        	//保存插件数据钩子
 | 
						|
        	hook('beforeEidtGoods',['data'=>&$data]);
 | 
						|
      
 | 
						|
        	$shop = model('shops')->get($shopId);
 | 
						|
        	if($shop['dataFlag'] ==-1 || $shop['shopStatus'] != 1)$data['isSale'] = 0;
 | 
						|
			$result = $this->validate(true)->allowField(true)->save($data);
 | 
						|
			if(false !== $result){
 | 
						|
				$goodsId = $this->goodsId;
 | 
						|
				//ect支付方式
 | 
						|
				// $ectPay=(int)input('ectPay');
 | 
						|
				// $ect['goodsId']=$goodsId;
 | 
						|
				// $ect['ectPay']=$ectPay;
 | 
						|
				// Db::name('goods_pay')->insert($ect);
 | 
						|
				//商品图片
 | 
						|
				WSTUseImages(0, $goodsId, $data['goodsImg']);
 | 
						|
				//商品相册
 | 
						|
				WSTUseImages(0, $goodsId, $data['gallery']);
 | 
						|
				//商品描述图片
 | 
						|
				WSTEditorImageRocord(0, $goodsId, '',$data['goodsDesc']);
 | 
						|
				//建立商品评分记录
 | 
						|
				$gs = [];
 | 
						|
				$gs['goodsId'] = $goodsId;
 | 
						|
				$gs['shopId'] = $shopId;
 | 
						|
				Db::name('goods_scores')->insert($gs);
 | 
						|
				//如果是实物商品并且有销售规格则保存销售和规格值
 | 
						|
    	        if($data['goodsType']==0 && $specsIds!=''){
 | 
						|
	    	        $specsIds = explode(',',$specsIds);
 | 
						|
			    	$specsArray = [];
 | 
						|
			    	foreach ($specsIds as $v){
 | 
						|
			    		$vs = explode('-',$v);
 | 
						|
			    		foreach ($vs as $vv){
 | 
						|
			    		   if(!in_array($vv,$specsArray))$specsArray[] = $vv;
 | 
						|
			    		}
 | 
						|
			    	}
 | 
						|
		    		//保存规格名称
 | 
						|
		    		$specMap = [];
 | 
						|
		    		foreach ($specsArray as $v){
 | 
						|
		    			$vv = explode('_',$v);
 | 
						|
		    			$sitem = [];
 | 
						|
		    			$sitem['shopId'] = $shopId;
 | 
						|
		    			$sitem['catId'] = (int)$vv[0];
 | 
						|
		    			$sitem['goodsId'] = $goodsId;
 | 
						|
		    			$sitem['itemName'] = input('post.specName_'.$vv[0]."_".$vv[1]);
 | 
						|
		    			$sitem['itemImg'] = input('post.specImg_'.$vv[0]."_".$vv[1]);
 | 
						|
		    			$sitem['dataFlag'] = 1;
 | 
						|
		    			$sitem['createTime'] = date('Y-m-d H:i:s');
 | 
						|
		    			$itemId = Db::name('spec_items')->insertGetId($sitem);
 | 
						|
		    			if($sitem['itemImg']!='')WSTUseImages(0, $itemId, $sitem['itemImg']);
 | 
						|
		    			$specMap[$v] = $itemId;
 | 
						|
		    		}
 | 
						|
		    		//保存销售规格
 | 
						|
		    		$defaultPrice = 0;//最低价
 | 
						|
		    		$totalStock = 0;//总库存
 | 
						|
		    		$gspecArray = [];
 | 
						|
		    		$isFindDefaultSpec = false;
 | 
						|
		    		$defaultSpec = Input('post.defaultSpec');
 | 
						|
		    		foreach ($specsIds as $v){
 | 
						|
		    			$vs = explode('-',$v);
 | 
						|
		    			$goodsSpecIds = [];
 | 
						|
		    			foreach ($vs as $gvs){
 | 
						|
		    				$goodsSpecIds[] = $specMap[$gvs];
 | 
						|
		    			}
 | 
						|
		    			$gspec = [];
 | 
						|
		    			$gspec['specIds'] = implode(':',$goodsSpecIds);
 | 
						|
		    			$gspec['shopId'] = $shopId;
 | 
						|
		    			$gspec['goodsId'] = $goodsId;
 | 
						|
		    			$gspec['productNo'] = Input('productNo_'.$v);
 | 
						|
		    			$gspec['marketPrice'] = (float)Input('marketPrice_'.$v);
 | 
						|
		    			$gspec['specPrice'] = (float)Input('specPrice_'.$v);
 | 
						|
		    			$gspec['specStock'] = (int)Input('specStock_'.$v);
 | 
						|
		    			$gspec['warnStock'] = (int)Input('warnStock_'.$v);
 | 
						|
		    			//设置默认规格
 | 
						|
		    			if($defaultSpec==$v){
 | 
						|
		    				$isFindDefaultSpec = true;
 | 
						|
		    				$defaultPrice = $gspec['specPrice'];
 | 
						|
		    				$gspec['isDefault'] = 1;
 | 
						|
		    			}else{
 | 
						|
		    				$gspec['isDefault'] = 0;
 | 
						|
		    			}
 | 
						|
                        $gspecArray[] = $gspec;
 | 
						|
                        //获取总库存
 | 
						|
                        $totalStock = $totalStock + $gspec['specStock'];
 | 
						|
		    		}
 | 
						|
		    		if(!$isFindDefaultSpec)return WSTReturn("请选择推荐规格");
 | 
						|
		    		if(count($gspecArray)>0){
 | 
						|
		    		    Db::name('goods_specs')->insertAll($gspecArray);
 | 
						|
		    		    //更新默认价格和总库存
 | 
						|
    	                $this->where('goodsId',$goodsId)->update(['isSpec'=>1,'shopPrice'=>$defaultPrice,'goodsStock'=>$totalStock]);
 | 
						|
		    		}
 | 
						|
    	        }
 | 
						|
    	        //保存商品属性
 | 
						|
		    	$attrsArray = [];
 | 
						|
		    	$attrRs = Db::name('attributes')->where(['goodsCatId'=>['in',$goodsCats],'isShow'=>1,'dataFlag'=>1])
 | 
						|
		    		            ->field('attrId')->select();
 | 
						|
		    	foreach ($attrRs as $key =>$v){
 | 
						|
		    		$attrs = [];
 | 
						|
		    		$attrs['attrVal'] = input('attr_'.$v['attrId']);
 | 
						|
		    		if($attrs['attrVal']=='')continue;
 | 
						|
		    		$attrs['shopId'] = $shopId;
 | 
						|
		    		$attrs['goodsId'] = $goodsId;
 | 
						|
		    		$attrs['attrId'] = $v['attrId'];
 | 
						|
		    		$attrs['createTime'] = date('Y-m-d H:i:s');
 | 
						|
		    		$attrsArray[] = $attrs;
 | 
						|
		    	}
 | 
						|
		    	if(count($attrsArray)>0)Db::name('goods_attributes')->insertAll($attrsArray);
 | 
						|
		    	
 | 
						|
		    	
 | 
						|
		    	if($aloneShop){
 | 
						|
		    		//保存商品成本价
 | 
						|
		    		$basicsArray = [];
 | 
						|
		    		$now = time();
 | 
						|
		    		$basicsArray['shopId'] = $shopId;
 | 
						|
		    		$basicsArray['goodsId'] = $goodsId;
 | 
						|
		    		$basicsArray['basicsMoney'] = $basicsMoney;
 | 
						|
		    		$basicsArray['createTime'] = $now;
 | 
						|
		    		Db::name('alone_goods')->insert($basicsArray);
 | 
						|
		    	}
 | 
						|
		    	hook('afterGoodsEct',['data'=>&$data,'goodsId'=>$goodsId]);
 | 
						|
    	        Db::commit();
 | 
						|
				return WSTReturn("新增成功", 1,['id'=>$goodsId]);
 | 
						|
			}else{
 | 
						|
				return WSTReturn($this->getError(),-1);
 | 
						|
			}
 | 
						|
        }catch (\Exception $e) {
 | 
						|
            Db::rollback();errLog($e);
 | 
						|
            return WSTReturn('新增失败',-1);
 | 
						|
        }
 | 
						|
	}
 | 
						|
	
 | 
						|
}
 |