from('{{%ybwm_store}}') ->where('uniacid=:uniacid AND id=:id',[':uniacid'=>$uniacid,':id'=>$storeId]) ->one(); //20210525 代码将上面模式三的商品写入到core_goods表 if($storeRe['isMain']==2&&$storeRe['goodsModel']==3) { $oldGoods=(new \yii\db\Query()) ->from('{{%ybwm_store_goods}}') ->where('uniacid=:uniacid AND storeId=:storeId',[':uniacid'=>$uniacid,':storeId'=>$storeId]) ->all(); foreach ($oldGoods as &$v){ $goodOne=[]; $goodOne=(new \yii\db\Query()) ->from('{{%ybwm_core_goods}}') ->where('id=:id',[':id'=>$v['goodsId']]) ->one(); //导入分类 $categoryOne=(new \yii\db\Query()) ->from('{{%ybwm_core_category}}') ->where('id=:id',[':id'=>$goodOne['typePid']]) ->one(); if($categoryOne){ $categoryOne['storeId']=$v['storeId']; $oldCategoryId=$categoryOne['id']; $categoryOne['oldCategoryId']=$oldCategoryId; unset($categoryOne['id']); $categoryOldOne=(new \yii\db\Query()) ->from('{{%ybwm_core_category}}') ->where(['oldCategoryId'=>$oldCategoryId,'storeId'=>$storeId]) ->one(); if($categoryOldOne){ $categoryId=$categoryOldOne['id']; }else{ Yii::$app->db->createCommand()->insert('{{%ybwm_core_category}}', $categoryOne)->execute(); $categoryId = Yii::$app->db->getLastInsertID(); } $goodOne['isSpecs']=$v['isSpecs']; $goodOne['price']=$v['price']; $goodOne['maxPrice']=$v['maxPrice']; $goodOne['stock']=$v['stock']; $goodOne['boxMoney']=$v['boxMoney']?:$goodOne['boxMoney']; $goodOne['isAttr']=$v['isAttr']; $goodOne['isMaterial']=$v['isMaterial']; $goodOne['deleteAt']=$v['deleteAt']; $goodOne['salesNum']=$v['salesNum']; $goodOne['isRecommend']=$v['isRecommend']; $goodOne['display']=$v['display']; $goodOne['createdAt']=$v['createdAt']; $goodOne['storeId']=$v['storeId']; $goodOne['typePid']=$categoryId; unset($goodOne['id']); Yii::$app->db->createCommand()->insert('{{%ybwm_core_goods}}', $goodOne)->execute(); $goodNewId = Yii::$app->db->getLastInsertID(); $storeData=json_decode($v['data'],true); if($v['isSpecs']==1&&$storeData['specs']){ foreach ($storeData['specs'] as $vo){ $specsOne=array( 'goodId'=>$goodNewId, 'specsName'=>$vo['specsName'], 'SalesPrice'=>$vo['SalesPrice'], 'SalesStock'=>$vo['SalesStock'], 'createdAt'=>$vo['createdAt']?:time(), 'fillType'=>$vo['fillType'], 'crossedPrice'=>$vo['crossedPrice'], 'goodCode'=>$vo['goodCode'], 'costPrice'=>$vo['costPrice'], 'uniacid'=>$v['uniacid'], 'storeId'=>$v['storeId'], 'boxMoney'=>$vo['boxMoney']?:0, ); Yii::$app->db->createCommand()->insert('{{%ybwm_good_specs}}', $specsOne)->execute(); } }else{ if($goodOne['isSpecs']==1){ Yii::$app->db->createCommand()->update('{{%ybwm_core_goods}}', ['isSpecs'=>2],['id'=>$goodNewId])->execute(); } } //属性 if($v['isAttr']==1){ if($storeData['attr']){ foreach ($storeData['attr'] as $vo){ $attrOne=array( 'goodId'=>$goodNewId, 'attrName'=>$vo['attrName'], 'attrStr'=>$vo['attrStr'], 'createdAt'=>$vo['createdAt']?:time(), 'uniacid'=>$v['uniacid'], 'storeId'=>$v['storeId'], ); Yii::$app->db->createCommand()->insert('{{%ybwm_good_attribute}}', $attrOne)->execute(); } } } if($v['isMaterial']==1){ if($storeData['materia']) { foreach ($storeData['materia'] as $vo) { $materiaOne = array( 'goodId' => $goodNewId, 'materialName' => $vo['materialName'], 'SalesPrice' => $vo['SalesPrice'], 'SalesStock' => $vo['SalesStock'], 'createdAt' => $vo['createdAt'] ?: time(), 'fillType' => $vo['fillType'], 'uniacid' => $v['uniacid'], 'storeId' => $v['storeId'], ); Yii::$app->db->createCommand()->insert('{{%ybwm_good_materia}}', $materiaOne)->execute(); } } } Yii::$app->db->createCommand()->delete('{{%ybwm_store_goods}}', ['id'=>$v['id']])->execute(); } } } $mainStoreId=(new \yii\db\Query()) ->from('{{%ybwm_store}}') ->where('uniacid=:uniacid AND isMain=1',[':uniacid'=>$uniacid]) ->one()['id']; $query=(new \yii\db\Query()) ->select('name,id,pid,icon,isRequire,customName,timeType,weekStr,startTime,endTime,item') ->from('{{%ybwm_core_category}}') ->where(['deleteAt' => 0,'uniacid'=>$uniacid,'display'=>1,'pid'=>0]) ->andWhere(['in','item',$item]); if($isRequire==1){ $query->andWhere(['isRequire'=>$isRequire]); } //如果是总门店 if($storeRe['isMain']==2&&$storeRe['goodsModel']==3){ $query->andWhere(['storeId'=>$storeId]); }else{ $query->andWhere(['storeId'=>$mainStoreId]); } $res=$query->orderBy('item desc,sort asc,id desc') ->all(); //获取门店商品设置 $storeConfig=Config::getSystemSet('currency', $uniacid); //saleShow 销量显示 1开启2关闭 stockShow 库存显示 1开启2关闭 sellOutShow 售罄显示 1开启2关闭 //dd($res);die; //商品分类取总门店的分类加当前门店分类 foreach ($res as $k=>$v){ //如果是自定义显示分类 if($isShow==1){ if($v['timeType']==2){ //判断当天在周几 if(in_array(getWeek(),json_decode($v['weekStr'],true))==false){ unset($res[$k]); continue; // 当 $value为b时,跳出本次循环 } if($v['startTime']&&$v['endTime']){ if(time()strtotime($v['endTime'])){ unset($res[$k]); continue; // 当 $value为b时,跳出本次循环 } } } } if($storeRe['isMain']==1||$storeRe['goodsModel']==3) { $goodQuery= (new \yii\db\Query()) ->select('a.typePid,a.aloneType,a.id,a.name,icon,0 + CAST(price AS CHAR)price,(salesNum+virtualSales)salesNum,stock,minNum,maxNum,num,a.body,b.name labelName,b.color as labelColor,a.isSpecs,a.isAttr,a.isMaterial,a.salesType,a.startTime,a.endTime,a.weekDay,a.weekSalesType') ->leftJoin('{{%ybwm_core_label}} b', 'a.goodLabel=b.id') ->from('{{%ybwm_core_goods}} a') ->where(['a.goodsType'=>$goodsType, 'a.deleteAt' => 0, 'a.uniacid' => $uniacid, 'a.storeId' => $storeId, 'a.display' => 1]); if($v['item']==12 || $v['item']==13){ if($v['customName']=='新品'){ $goodQuery->andWhere(['a.specialType' => 1]); } if($v['customName']=='热卖'){ $goodQuery->andWhere(['a.specialType' => 2]); } if($v['customName']=='推荐'){ $goodQuery->andWhere(['a.specialType' => 3]); } }else{ $goodQuery->andWhere(['a.typePid' => $v['id']]); } if($storeConfig['sellOutShow']==2){ $goodQuery->andWhere(['>','a.stock',0]); } //var_dump(ddSql($goodQuery));die; $res[$k]['goods']=$goodQuery->orderBy('a.sort asc,a.id desc') ->all(); }else{ $goodQuery=(new \yii\db\Query()) ->select('b.typePid,a.data,a.isSpecs,b.isSpecs goodSpecs,b.aloneType,a.goodsId id,b.name,icon,0 + CAST(a.price AS CHAR)price,(a.salesNum+b.virtualSales)salesNum,a.stock,b.minNum,b.maxNum,b.num,b.body,c.name labelName,c.color as labelColor,a.isSpecs,b.isAttr,b.isMaterial,b.salesType,b.startTime,b.endTime,b.weekDay,b.weekSalesType') ->from('{{%ybwm_store_goods}} a') ->leftJoin('{{%ybwm_core_goods}} b', 'a.goodsId=b.id') ->leftJoin('{{%ybwm_core_label}} c', 'b.goodLabel=c.id') ->where(['b.goodsType'=>$goodsType, 'b.deleteAt' => 0, 'a.uniacid' => $uniacid, 'a.storeId' => $storeId, 'a.display' => 1]); if($v['item']==12 || $v['item']==13){ if($v['customName']=='新品'){ $goodQuery->andWhere(['b.specialType' => 1]); } if($v['customName']=='热卖'){ $goodQuery->andWhere(['b.specialType' => 2]); } if($v['customName']=='推荐'){ $goodQuery->andWhere(['b.specialType' => 3]); } }else{ $goodQuery->andWhere(['b.typePid' => $v['id']]); } if($storeConfig['sellOutShow']==2){ $goodQuery->andWhere(['>','a.stock',0]); } $res[$k]['goods']=$goodQuery->orderBy('b.sort asc,b.id desc') ->all(); } // dd($res[$k]['goods']);die; foreach ($res[$k]['goods'] as $ko=>$vo){ $activityGoodData=self::getGoodActivity($uniacid,$storeId,$vo['price'],$vo['id'],$goodsType); $res[$k]['goods'][$ko]['activityGoodData']=$activityGoodData; $res[$k]['goods'][$ko]['vipPrice']=Member::getDiscountByGood($userId,$vo['id'],$vo['price'])['money']; if($activityGoodData['type']==1 || $activityGoodData['type']==2 || $activityGoodData['type']==3){ $res[$k]['goods'][$ko]['vipPrice']=Member::getDiscountByGood($userId,$vo['id'],$activityGoodData['activityMoney'])['money']; } if($storeRe['isMain']==2&&$storeRe['goodsModel']<3){ $res[$k]['goods'][$ko]['isSpecs']=$res[$k]['goods'][$ko]['goodSpecs']; Yii::$app->db->createCommand()->update('{{%ybwm_store_goods}}',['isSpecs'=>$res[$k]['goods'][$ko]['goodSpecs']], ['goodsId'=>$res[$k]['goods'][$ko]['id'],'storeId'=>$storeId])->execute(); } if($vo['salesType']==2){ if($vo['startTime']>time()||$vo['endTime']select('startTime,endTime') ->from('{{%ybwm_good_hours}}') ->where(['uniacid' => $uniacid, 'goodId' =>$vo['id']])->andWhere(['storeId' => $storeId])->all(); }else{ $goodTimeArr=(new \yii\db\Query()) ->select('startTime,endTime') ->from('{{%ybwm_good_hours}}') ->where(['uniacid' => $uniacid, 'goodId' =>$vo['id']])->andWhere(['storeId' => $mainStoreId])->all(); } if($goodTimeArr){ $bool=0; foreach ($goodTimeArr as $vs){ $strBool=getCurrentTimeSection($vs['startTime'],$vs['endTime']); if($strBool){ $bool++; } } if(!$bool){ unset($res[$k]['goods'][$ko]); } }else{ unset($res[$k]['goods'][$ko]); } } } } $res[$k]['goods']=array_values($res[$k]['goods']); if(!$res[$k]['goods']){ unset($res[$k]); } } $data=array_values($res); return $data; } //获取指定分类下的商品 public function getCategoryGoods($uniacid,$storeId,$cid){ $re= (new \yii\db\Query()) ->from('{{%ybwm_core_category}}') ->where(['id'=>$cid,'deleteAt'=>0,'uniacid'=>$uniacid,'item'=>6]) ->one(); $storeRes=(new \yii\db\Query()) ->from('{{%ybwm_store}}') ->where('uniacid=:uniacid AND id=:id',[':uniacid'=>$uniacid,':id'=>$storeId]) ->one(); $storeConfig=Config::getSystemSet('currency', $uniacid); if($storeRes['isMain']==1||$storeRes['goodsModel']==3){ $goodsQuery=(new \yii\db\Query()) ->select('a.aloneType,a.id,a.name,icon,0 + CAST(price AS CHAR)price,salesNum,stock,minNum,maxNum,num,a.body,b.name labelName,b.color as labelColor,a.isSpecs,a.isAttr,a.isMaterial,a.salesType,a.startTime,a.endTime,a.weekDay,a.weekSalesType') ->leftJoin('{{%ybwm_core_label}} b', 'a.goodLabel=b.id') ->from('{{%ybwm_core_goods}} a') ->where('a.uniacid=:uniacid AND a.storeId=:storeId and a.deleteAt=0 and a.display=1',[':uniacid'=>$uniacid,':storeId'=>$storeId]); }else { $goodsQuery=(new \yii\db\Query()) ->select('b.aloneType,a.goodsId id,b.name,icon,0 + CAST(a.price AS CHAR)price,b.salesNum,a.stock,b.minNum,b.maxNum,b.num,b.body,c.name labelName,c.color as labelColor,b.isSpecs,b.isAttr,b.isMaterial,b.salesType,b.startTime,b.endTime,b.weekDay,b.weekSalesType') ->from('{{%ybwm_store_goods}} a') ->leftJoin('{{%ybwm_core_goods}} b', 'a.goodsId=b.id') ->leftJoin('{{%ybwm_core_label}} c', 'b.goodLabel=c.id') ->where('a.uniacid=:uniacid AND a.storeId=:storeId and b.deleteAt=0 and a.display=1',[':uniacid'=>$uniacid,':storeId'=>$storeId]); } if($re['pid']==0){ $goodsQuery->andWhere(['typePid'=>$cid]); }else{ $goodsQuery->andWhere(['typeId'=>$cid]); } if($storeConfig['sellOutShow']==2){ $goodsQuery->andWhere(['>','a.stock',0]); } if($storeRes['isMain']==1||$storeRes['goodsModel']==1) { $goodsData = $goodsQuery->orderBy('a.sort asc,a.id desc')->all(); }else{ $goodsData = $goodsQuery->orderBy('b.sort asc,a.id desc')->all(); } foreach ($goodsData as $ko=>$vo){ if($vo['salesType']==2){ if($vo['startTime']>time()||$vo['endTime']select('startTime,endTime') ->from('{{%ybwm_good_hours}}') ->where(['uniacid' => $uniacid, 'storeId' => $storeId, 'goodId' =>$vo['id']]) ->all(); $bool=0; foreach ($goodTimeArr as $vs){ $strBool=getCurrentTimeSection($vs['startTime'],$vs['endTime']); if($strBool){ $bool++; } } if(!$bool){ unset($goodsData[$ko]); } } } } $goodsData=array_values($goodsData); return $goodsData; } //搜索的商品 public function getSelectGoods($uniacid,$storeId,$keyword,$page,$size,$userId=null,$goodsType=1){ $storeRes=(new \yii\db\Query()) ->from('{{%ybwm_store}}') ->where('uniacid=:uniacid AND id=:id',[':uniacid'=>$uniacid,':id'=>$storeId]) ->one(); $storeConfig=Config::getSystemSet('currency', $uniacid); if($storeRes['isMain']==1||$storeRes['goodsModel']==3){ $goodsQuery=(new \yii\db\Query()) ->select('a.display,a.aloneType,a.id,a.name,icon,0 + CAST(price AS CHAR)price,salesNum,stock,minNum,maxNum,num,a.body,b.name labelName,b.color as labelColor,a.isSpecs,a.isAttr,a.isMaterial,a.salesType,a.startTime,a.endTime,a.weekDay,a.weekSalesType') ->leftJoin('{{%ybwm_core_label}} b', 'a.goodLabel=b.id') ->from('{{%ybwm_core_goods}} a') ->where('a.uniacid=:uniacid AND a.storeId=:storeId and a.deleteAt=0 and a.display=1 and a.goodsType='.$goodsType,[':uniacid'=>$uniacid,':storeId'=>$storeId]); if($keyword){ $goodsQuery->andWhere(['like','a.name',$keyword]); } }else { $goodsQuery=(new \yii\db\Query()) ->select('a.display,b.aloneType,a.goodsId id,b.name,icon,0 + CAST(a.price AS CHAR)price,b.salesNum,a.stock,b.minNum,b.maxNum,b.num,b.body,c.name labelName,c.color as labelColor,b.isSpecs,b.isAttr,b.isMaterial,b.salesType,b.startTime,b.endTime,b.weekDay,b.weekSalesType') ->from('{{%ybwm_store_goods}} a') ->leftJoin('{{%ybwm_core_goods}} b', 'a.goodsId=b.id') ->leftJoin('{{%ybwm_core_label}} c', 'b.goodLabel=c.id') ->where('a.uniacid=:uniacid AND a.storeId=:storeId and b.deleteAt=0 and a.display=1 and b.goodsType='.$goodsType,[':uniacid'=>$uniacid,':storeId'=>$storeId]); if($keyword){ $goodsQuery->andWhere(['like','b.name',$keyword]); } } if($storeConfig['sellOutShow']==2){ $goodsQuery->andWhere(['>','a.stock',0]); } if($storeRes['isMain']==1||$storeRes['goodsModel']==3) { $goodsData = $goodsQuery->offset(($page - 1) * $size)->limit($size)->orderBy('a.sort asc,a.id desc')->all(); }else{ $goodsData = $goodsQuery->offset(($page - 1) * $size)->limit($size)->orderBy('b.sort asc,a.id desc')->all(); } foreach ($goodsData as $ko=>$vo){ $activityGoodData=self::getGoodActivity($uniacid,$storeId,$vo['price'],$vo['id'],$goodsType); $goodsData[$ko]['activityGoodData']=$activityGoodData; $goodsData[$ko]['vipPrice']=Member::getDiscountByGood($userId,$vo['id'],$vo['price'])['money']; if($activityGoodData['type']==1 || $activityGoodData['type']==2 || $activityGoodData['type']==3){ $goodsData[$ko]['vipPrice']=Member::getDiscountByGood($userId,$vo['id'],$activityGoodData['activityMoney'])['money']; } if($vo['salesType']==2){ if($vo['startTime']>time()||$vo['endTime']select('startTime,endTime') ->from('{{%ybwm_good_hours}}') ->where(['uniacid' => $uniacid, 'storeId' => $storeId, 'goodId' =>$vo['id']]) ->all(); $bool=0; foreach ($goodTimeArr as $vs){ $strBool=getCurrentTimeSection($vs['startTime'],$vs['endTime']); if($strBool){ $bool++; } } if(!$bool){ unset($goodsData[$ko]); } } } } $goodsData=array_values($goodsData); return $goodsData; } //获取指定门店的商品分类 public function getCategoryList($uniacid){ $storeId=(new \yii\db\Query()) ->select('id') ->from('{{%ybwm_store}}') ->where('uniacid=:uniacid AND isMain=1',[':uniacid'=>$uniacid]) ->one()['id']; $re= (new \yii\db\Query()) ->select('id,icon,name,pid,isRequire') ->from('{{%ybwm_core_category}}') ->where(['deleteAt'=>0,'uniacid'=>$uniacid,'item'=>6,'storeId'=>$storeId]) ->orderBy('sort asc,id desc') ->all(); $categoryData=self::getTree($re,0); return $categoryData; } public function getTree($arr,$id){ $list =array(); foreach ($arr as $k=>$v){ if ($v['pid'] == $id){ if(self::getTree($arr,$v['id'])){ $v['children'] =self::getTree($arr,$v['id']); } $list[] = $v; } } return $list; } //计算商品的浏览量 public function getGoodVisit($uniacid,$storeId,$id,$startTime=null,$endTime=null){ $goodQuery=(new \yii\db\Query()) ->from('{{%ybwm_goods_visit}}') ->where('uniacid=:uniacid AND storeId=:storeId AND goodsId=:goodsId',[':uniacid'=>$uniacid,'storeId'=>$storeId,'goodsId'=>$id]); if($startTime&&$endTime){ $goodQuery->andWhere('createdAt>=:startTime AND createdAt<=:endTime',[':startTime'=>$startTime,':endTime'=>$endTime]); } $count=$goodQuery->count(); return $count?:0; } //计算商品的下单数 public function getGoodCount($uniacid,$storeId,$id,$startTime,$endTime){ $goodQuery=(new \yii\db\Query()) ->from('{{%ybwm_order_goods}} a') ->leftJoin('{{%ybwm_takeout_order}} b','a.orderId=b.id') ->where('a.uniacid=:uniacid AND a.storeId=:storeId AND goodsId=:goodsId AND b.state in (2,3,4,5,6)',[':uniacid'=>$uniacid,'storeId'=>$storeId,'goodsId'=>$id]); if($startTime&&$endTime){ $goodQuery->andWhere('a.createdAt>=:startTime AND a.createdAt<=:endTime',[':startTime'=>$startTime,':endTime'=>$endTime]); } $count=$goodQuery->count(); return $count?:0; } //计算商品的销售量 public function getGoodSum($uniacid,$storeId,$id,$startTime,$endTime){ $goodQuery=(new \yii\db\Query()) ->from('{{%ybwm_order_goods}} a') ->leftJoin('{{%ybwm_takeout_order}} b','a.orderId=b.id') ->where('a.uniacid=:uniacid AND a.storeId=:storeId AND goodsId=:goodsId AND b.state in (2,3,4,5,6)',[':uniacid'=>$uniacid,'storeId'=>$storeId,'goodsId'=>$id]); if($startTime&&$endTime){ $goodQuery->andWhere('a.createdAt>=:startTime AND a.createdAt<=:endTime',[':startTime'=>$startTime,':endTime'=>$endTime]); } $count=$goodQuery->sum('a.num'); return $count?:0; } //同步分类下的商品 public function synchroGoods($storeId,$typeId){ $goodType=(new \yii\db\Query()) ->from('{{%ybwm_core_category}}') ->where('id=:id',[':id'=>$typeId])->one(); unset($goodType['id']); $goodType['item']=9; // $category=(new \yii\db\Query()) // ->from('{{%ybwm_core_category}}') // ->where($goodType)->one(); // print_R($category);die; Yii::$app->db->createCommand()->insert('{{%ybwm_core_category}}', $goodType)->execute(); $newTypeId = Yii::$app->db->getLastInsertID(); $goodArr=(new \yii\db\Query()) ->from('{{%ybwm_core_goods}}') ->where('typePid=:typePid AND deleteAt=0',[':typePid'=>$typeId])->all(); for($i=0;$ifrom('{{%ybwm_good_attribute}}') ->where('goodId=:goodId',[':goodId'=>$goodArr[$i]['id']])->all(); $hours=(new \yii\db\Query()) ->from('{{%ybwm_good_hours}}') ->where('goodId=:goodId',[':goodId'=>$goodArr[$i]['id']])->all(); $materia=(new \yii\db\Query()) ->from('{{%ybwm_good_materia}}') ->where('goodId=:goodId',[':goodId'=>$goodArr[$i]['id']])->all(); $specs=(new \yii\db\Query()) ->from('{{%ybwm_good_specs}}') ->where('goodId=:goodId',[':goodId'=>$goodArr[$i]['id']])->all(); $goodArr[$i]['goodsType']=2; $goodArr[$i]['typePid']=$newTypeId; $goodArr[$i]['typeId']=0; $goodArr[$i]['storeId']=$storeId; unset($goodArr[$i]['id']); Yii::$app->db->createCommand()->insert('{{%ybwm_core_goods}}', $goodArr[$i])->execute(); $goodsId = Yii::$app->db->getLastInsertID(); //如果是主门店 模式一的子门店都插入一条数据 //同步插入到子门店商品列表中 $shopDatas = (new \yii\db\Query()) ->select('id') ->from('{{%ybwm_store}}') ->where(['uniacid' => $goodType['uniacid'], 'isMain' => 2,'deleteAt'=>0]) ->andWhere(['<','goodsModel',3]) ->all(); if ($shopDatas){ foreach ($shopDatas as $v){ $subArray=array( 'goodsId'=>$goodsId, 'display'=>3, 'stock'=>intval(trim($goodArr[$i]['stock']))?:'0', 'price'=>trim($goodArr[$i]['price']), 'storeId'=>$v['id'], 'uniacid'=>$goodType['uniacid'], 'createdAt'=>time(), 'isSpecs'=>$goodArr[$i]['isSpecs'], 'data'=>json_encode(['specs'=>$specs,'attr'=>$attribute,'materia'=>$materia]) ); Yii::$app->db->createCommand()->insert('{{%ybwm_store_goods}}', $subArray)->execute(); } } if($attribute){ for($a=0;$adb->createCommand()->insert('{{%ybwm_good_attribute}}', $attribute[$a])->execute(); } } if($hours){ for($h=0;$hdb->createCommand()->insert('{{%ybwm_good_hours}}', $hours[$h])->execute(); } } if($materia){ for($m=0;$mdb->createCommand()->insert('{{%ybwm_good_materia}}', $materia[$m])->execute(); } } if($specs){ for($s=0;$sdb->createCommand()->insert('{{%ybwm_good_specs}}', $specs[$s])->execute(); } } } return true; } //查看商品活动后的价格 public function getGoodActivity($uniacid,$storeId,$money,$goodsId,$goodsType=1){ $startTime=strtotime(date("Y-m-d")." 00:00:00"); $endTime=strtotime(date("Y-m-d")." 23:59:59"); $query=(new \yii\db\Query()) ->from('{{%ybwm_good_activity}}') ->where('uniacid=:uniacid AND abolishAt=0 AND display=1 AND deleteAt=0 AND startTime<:startTime AND endTime>:endTime', [':endTime'=>time(),':startTime'=>time(),':uniacid'=>$uniacid]) ->andWhere(['or',['storeId'=>$storeId,'storeType'=>1],['storeType'=>2],['and',['storeType'=>3],['like','storeArr',$storeId]]]) ->orderBy('id desc'); if($goodsType==1){ $query->andWhere(['like','goodsArr','"id":"'.$goodsId.'"']); }else{ $query->andWhere(['like','goodsArr2','"id":"'.$goodsId.'"']); } //var_dump(ddSql($query));die; $info=$query->one(); if($goodsType==1){ $orderNum=(new \yii\db\Query()) ->from('{{%ybwm_order_goods}} as a') ->leftJoin('{{%ybwm_takeout_order}} b', 'a.orderId=b.id') ->where('a.storeId=:storeId AND a.goodsId=:goodsId AND a.item=1 AND a.isActivity>0 AND b.state in (1,2,3,4,5,6,9) AND a.createdAt>=:startTime AND a.createdAt<=:endTime', [':startTime'=>$startTime,':endTime'=>$endTime,':storeId'=>$storeId,':goodsId'=>$goodsId]) ->sum('a.num')?:0; }else{ $orderNum=(new \yii\db\Query()) ->from('{{%ybwm_order_goods}} as a') ->leftJoin('{{%ybwm_instore_order}} b', 'a.orderId=b.id') ->where('a.storeId=:storeId AND a.goodsId=:goodsId AND a.item>1 AND a.createdAt>=:startTime AND a.createdAt<=:endTime', [':startTime'=>$startTime,':endTime'=>$endTime,':storeId'=>$storeId,':goodsId'=>$goodsId]) ->andWhere(['in','b.state',[2,3]]) ->sum('a.num')?:0; } // if($goodsId==10){ // var_dump($orderNum); // var_dump($info['stock']);die; // } if($orderNum>=$info['stock']){ return [ 'id'=>0, 'type'=>0, 'money'=>0, 'activityMoney'=>$money, 'limitNum'=>0, 'limitType'=>$info['limitType'], 'stock'=>$info['stock'], ]; } $limitType=$info['limitType']; if($limitType==1){ $limitNum=0; }else{ $limitNum=$info['limitNum']?:1; } if($info['type']==1){ return [ 'id'=>$info['id'], 'type'=>$info['type'], 'discount'=>$info['goodsMoney'], 'activityMoney'=>$info['goodsMoney'], 'limitNum'=>$limitNum, 'limitType'=>$info['limitType'], 'stock'=>$info['stock'], ]; } if($info['type']==2){ return [ 'id'=>$info['id'], 'type'=>$info['type'], 'discount'=>$info['goodsMoney'], 'activityMoney'=>bcmul($money,$info['goodsMoney']/10,2), 'limitNum'=>$limitNum, 'limitType'=>$info['limitType'], 'stock'=>$info['stock'], ]; } if($info['type']==3){ return [ 'id'=>$info['id'], 'type'=>$info['type'], 'discount'=>$info['goodsMoney'], 'activityMoney'=>bcsub($money,$info['goodsMoney'],2), 'limitNum'=>$limitNum, 'limitType'=>$info['limitType'], 'stock'=>$info['stock'], ]; } if($info['type']==4){ return [ 'id'=>$info['id'], 'type'=>$info['type'], 'discount'=>$info['goodsMoney'], 'activityMoney'=>bcmul($money,$info['goodsMoney']/10,2), 'limitNum'=>$limitNum, 'limitType'=>$info['limitType'], 'stock'=>$info['stock'], ]; } if($info['type']==5){ return [ 'id'=>$info['id'], 'type'=>$info['type'], 'discount'=>0, 'activityMoney'=>0, 'limitNum'=>$limitNum, 'limitType'=>$info['limitType'], 'stock'=>$info['stock'], ]; } return [ 'id'=>0, 'type'=>0, 'money'=>0, 'activityMoney'=>$money, 'limitNum'=>0, 'limitType'=>$info['limitType'], 'stock'=>$info['stock'], ]; } //查看商品价格 public function getGoodMoneyByCar($carId){ $shopInfo = (new \yii\db\Query()) ->from('{{%ybwm_shop_car}}') ->where(['id' => $carId]) ->one(); $goodInfo = (new \yii\db\Query()) ->from('{{%ybwm_core_goods}}') ->where(['id' => $shopInfo['goodsId'], 'uniacid' => $shopInfo['uniacid']]) ->one(); $storeRe=(new \yii\db\Query()) ->from('{{%ybwm_store}}') ->where('uniacid=:uniacid AND id=:id',[':uniacid'=>$shopInfo['uniacid'],':id'=>$shopInfo['storeId']]) ->one(); if($storeRe['isMain']==2&&$storeRe['goodsModel']<3){ $storeGood=(new \yii\db\Query()) ->from('{{%ybwm_store_goods}}') ->where(['goodsId' => $shopInfo['goodsId'], 'storeId' => $shopInfo['storeId'], 'uniacid' => $shopInfo['uniacid']]) ->one(); $goodInfo['price']=$storeGood['price']; } $money=$goodInfo['price']; if ($shopInfo['groupId']) { $specsInfo = (new \yii\db\Query()) ->from('{{%ybwm_good_specs}}') ->where(['id' => $shopInfo['groupId'],'goodId' => $shopInfo['goodsId']]) ->one(); $money = $specsInfo['SalesPrice']; } return $money; } function getGoodInfo($uniacid,$storeId,$goodsId,$groupId=0){ $goodsInfo=(new \yii\db\Query()) ->from('{{%ybwm_core_goods}}') ->where(['id'=>$goodsId]) ->one(); $storeRes = (new \yii\db\Query()) ->from('{{%ybwm_store}}') ->where(['id' =>$storeId,'uniacid' =>$uniacid]) ->one(); if($storeRes['isMain']==1||$storeRes['goodsModel']==3){ if($groupId){ $specsInfo=(new \yii\db\Query()) ->from('{{%ybwm_good_specs}}') ->where(['id'=>$groupId]) ->one(); $goodsInfo['price']=$specsInfo['SalesPrice']; $goodsInfo['stock']=$specsInfo['SalesStock']; $goodsInfo['name']=$goodsInfo['name'].'('.$specsInfo['specsName'].')'; } }else{ $goodsInfo=(new \yii\db\Query()) ->from('{{%ybwm_store_goods}} a') ->leftJoin('{{%ybwm_core_goods}} b','a.goodsId=b.id') ->where(['goodsId'=>$goodsId,'a.storeId'=>$storeId]) ->one(); if($groupId){ $goodsData=json_decode($goodsInfo['data'],true)['specs']; foreach ($goodsData as $v){ if($groupId==$v['id']){ $goodsInfo['price']=$v['SalesPrice']; $goodsInfo['stock']=$v['SalesStock']; $goodsInfo['name']=$goodsInfo['name'].'('.$v['specsName'].')'; } } } } return $goodsInfo; } //异常多规格数据处理 public function saveGoods($id,$goodsType=1){ if($goodsType==1){ $goodsData=(new \yii\db\Query()) ->from('{{%ybwm_core_goods}}') ->where(['id'=>$id]) ->one(); if($goodsData['isSpecs']==1){ $speData=(new \yii\db\Query()) ->select('fillType,id,specsName,SalesPrice,SalesStock,status,crossedPrice,boxMoney,goodCode') ->from('{{%ybwm_good_specs}}') ->where(['goodId'=>$id]) ->all(); if(!$speData){ Yii::$app->db->createCommand()->update('{{%ybwm_core_goods}}',['isSpecs'=>2], ['id'=>$id])->execute(); } } }else{ $goodsInfo=(new \yii\db\Query())->from('{{%ybwm_store_goods}} a') ->select('a.uniacid,a.storeId,b.goodsPid,a.id,a.storeId,b.name,a.stock,a.price,a.deleteAt,a.display,a.data,a.isSpecs,b.isSpecs goodSpecs,a.goodsId') ->leftJoin('{{%ybwm_core_goods}} b','a.goodsId=b.id') ->where(['a.id'=>$id])->one(); $storeRe=(new \yii\db\Query()) ->from('{{%ybwm_store}}') ->where('uniacid=:uniacid AND id=:id',[':uniacid'=>$goodsInfo['uniacid'],':id'=>$goodsInfo['storeId']]) ->one(); if($storeRe['isMain']==2&&$storeRe['goodsModel']<3){ if($goodsInfo['isSpecs']==1){ $specsData=json_decode($goodsInfo['data'],true)['specs']; if(!$specsData){ $goodsData=(new \yii\db\Query()) ->from('{{%ybwm_core_goods}}') ->where(['id'=>$goodsInfo['goodsId']]) ->one(); if($goodsData){ $speData=(new \yii\db\Query()) ->select('fillType,id,specsName,SalesPrice,SalesStock,status,crossedPrice,boxMoney,goodCode') ->from('{{%ybwm_good_specs}}') ->where(['goodId'=>$goodsInfo['goodsId'],'storeId'=>$goodsInfo['storeId']]) ->all(); if($speData){ $insetSpec=json_decode($goodsInfo)['data']; $insetSpec['specs']=[]; $insetSpec['specs']=$speData; Yii::$app->db->createCommand()->update('{{%ybwm_store_goods}}',['data'=>json_encode($insetSpec),'isSpecs'=>1], ['id'=>$id])->execute(); }else{ Yii::$app->db->createCommand()->update('{{%ybwm_store_goods}}', ['data'=>'','isSpecs'=>2],['id'=>$id])->execute(); } }else{ Yii::$app->db->createCommand()->delete('{{%ybwm_store_goods}}', ['id'=>$id])->execute(); } } }else{ Yii::$app->db->createCommand()->update('{{%ybwm_store_goods}}',['data'=>'','isSpecs'=>2], ['id'=>$id])->execute(); } } } } //检测购物车商品价格变化 public static function checkPriceChange($carId){ $now=time(); $shopInfo = (new \yii\db\Query()) ->from('{{%ybwm_shop_car}}') ->where(['id' => $carId]) ->one(); $goodInfo = (new \yii\db\Query()) ->from('{{%ybwm_core_goods}}') ->where(['id' => $shopInfo['goodsId'], 'uniacid' => $shopInfo['uniacid']]) ->one(); $storeRe=(new \yii\db\Query()) ->from('{{%ybwm_store}}') ->where('uniacid=:uniacid AND id=:id',[':uniacid'=>$shopInfo['uniacid'],':id'=>$shopInfo['storeId']]) ->one(); $money = $goodInfo['price']; if($storeRe['isMain']==2&&$storeRe['goodsModel']<3){ $storeGood=(new \yii\db\Query()) ->from('{{%ybwm_store_goods}}') ->where(['goodsId' => $shopInfo['goodsId'], 'storeId' => $shopInfo['storeId'], 'uniacid' => $shopInfo['uniacid']]) ->one(); $goodInfo['price']=$storeGood['price']; } $money=$goodInfo['price']; if ($shopInfo['groupId']) { $specsInfo = (new \yii\db\Query()) ->from('{{%ybwm_good_specs}}') ->where(['id' => $shopInfo['groupId'],'goodId' => $shopInfo['goodsId']]) ->one(); $money = $specsInfo['SalesPrice']; } $user = $specsInfo = (new \yii\db\Query()) ->from('{{%ybwm_member}}') ->where(['id' => $shopInfo['userId']]) ->one(); //判断商品原始价格是否有变动 if($shopInfo['originalMoney'] != $money){ return['state'=>false,'message'=>$shopInfo['name'].'活动商品有变动,请重新添加']; } //判断商品会员价变动 if(!empty($goodInfo['discountArr']) && !empty($goodInfo['discountOpen'])){ foreach (json_decode($goodInfo['discountArr'],true) as $key3 => $level){ if($user['level'] == $level['level'] && $level['open'] == 1 ){ if(bcmul($level['discount'],$shopInfo['originalMoney']/10,2) != $shopInfo['money']){ return['state'=>false,'message'=>$shopInfo['name'].'商品会员价有变动,请重新添加']; break; } } } } //判断商品活动价变动 if($shopInfo['discountId']){ $activity=(new \yii\db\Query()) ->from('{{%ybwm_good_activity}}') ->where('abolishAt=0 AND deleteAt=0 AND display=1 AND startTime<:time AND endTime>:time',[':time'=>$now]) ->andWhere(['id'=>$shopInfo['discountId']]) ->one(); if(!$activity){ return['state'=>false,'message'=>$shopInfo['name'].'活动商品有变动,请重新添加']; } if(!empty($activity['goodsArr'])){ foreach (json_decode($activity['goodsArr'],true) as $key2 => $activityGoods){ //特价 if($shopInfo['discountType'] == 1){ if($activityGoods['id'] == $shopInfo['goodsId'] && $activity['goodsMoney'] != $shopInfo['originalDiscountPrice']){ return['state'=>false,'message'=>$shopInfo['name'].'活动商品有变动,请重新添加']; } //打折和第二件打折 }else if($shopInfo['discountType'] == 2 || $shopInfo['discountType'] == 4 ){ if($activityGoods['id'] == $shopInfo['goodsId'] && bcmul($activity['goodsMoney'],$money/10,2) != $shopInfo['originalDiscountPrice']){ return['state'=>false,'message'=>$shopInfo['name'].'活动商品有变动,请重新添加']; } //满减 }else if($shopInfo['discountType'] == 3){ if($activityGoods['id'] == $shopInfo['goodsId'] && bcsub($money,$activity['goodsMoney'],2) != $shopInfo['originalDiscountPrice']){ return['state'=>false,'message'=>$shopInfo['name'].'活动商品有变动,请重新添加']; } } } } }else{ //判断当前无商品否有活动 和价格变动 $activityList=(new \yii\db\Query()) ->from('{{%ybwm_good_activity}}') ->where('abolishAt=0 AND deleteAt=0 AND display=1 AND startTime<:time AND endTime>:time',[':time'=>$now]) ->andWhere(['storeId'=>$shopInfo['storeId']]) ->andWhere(['like','goodsArr','"id":"'.$goodInfo['id'].'"']) ->all(); foreach ($activityList as $key1 => $activity){ foreach (json_decode($activity['goodsArr'],true) as $key2 => $activityGoods){ if($activityGoods['id'] == $shopInfo['goodsId']){ return['state'=>false,'message'=>$shopInfo['name'].'活动商品有变动,请重新添加']; break; } } } } return['state'=>true,'message'=>'']; } }