Files
addons
app_download_files
extend
hyhproject
admin
app
common
home
home2
behavior
common
conf
controller
Ads.php
Alipays.php
Areas.php
Base.php
Brands.php
Carts.php
Cashconfigs.php
Cashdraws.php
Error.php
Favorites.php
Goods.php
Goodsappraises.php
Goodscats.php
Goodsconsult.php
Goodsvirtuals.php
Helpcenter.php
Imports.php
Index.php
Informs.php
Invoices.php
Logmoneys.php
Messages.php
News.php
Ordercomplains.php
Orderrefunds.php
Orders.php
Reports.php
Settlements.php
Shopcats.php
Shopconfigs.php
Shopfreights.php
Shoproles.php
Shops.php
Shopusers.php
Switchs.php
Tmp.php
Unionpays.php
Useraddress.php
Users.php
Userscores.php
Wallets.php
Weixinpays.php
model
validate
view
mobile2
wechat2
.htaccess
command.php
mobile
oss
static
thinkphp
upload
vendor
wxtmp
.gitignore
.htaccess
.user.ini
404.html
H5436787D.wgt
admin.php
app-release.apk
app_download.html
cash.lock
demo.php
get_version.php
get_version_new.php
index.html
index.php
reg.lock
robots.txt
qlg.tsgz.moe/hyhproject/home2/controller/Goods.php
2019-09-06 23:53:10 +08:00

707 lines
21 KiB
PHP
Executable File

<?php
namespace wstmart\home\controller;
use wstmart\home\model\Goods as M;
use wstmart\common\model\Goods as CM;
/**
* ============================================================================
* 商品控制器
*/
class Goods extends Base{
protected $beforeActionList = [
'checkShopAuth' => ['except'=>'search,lists,detail,historybygoods,contrastgoods,contrastdel,contrast']
];
/**
* 批量删除商品
*/
public function batchDel(){
$m = new M();
return $m->batchDel();
}
/**
* 修改商品库存/价格
*/
public function editGoodsBase(){
$m = new M();
return $m->editGoodsBase();
}
/**
* 修改商品状态
*/
public function changSaleStatus(){
$m = new M();
return $m->changSaleStatus();
}
/**
* 修改商品店长推荐状态
*/
public function changStoreRecom(){
$m = new M();
return $m->changStoreRecom();
}
/**
* 批量修改商品状态 新品/精品/热销/推荐
*/
public function changeGoodsStatus(){
$m = new M();
return $m->changeGoodsStatus();
}
/**
* 批量修改商品状态 店长推荐
*/
public function changeStoreStatus(){
$m = new M();
return $m->changeStoreStatus();
}
/**
* 批量上(下)架
*/
public function changeSale(){
$m = new M();
return $m->changeSale();
}
/**
* 上架商品列表
*/
public function sale(){
return $this->fetch('shops/goods/list_sale');
}
/**
* 获取上架商品列表
*/
public function saleByPage(){
$m = new M();
$rs = $m->saleByPage();
$rs['status'] = 1;
return $rs;
}
/**
* 仓库中商品
*/
public function store(){
return $this->fetch('shops/goods/list_store');
}
/**
* 审核中的商品
*/
public function audit(){
return $this->fetch('shops/goods/list_audit');
}
/**
* 获取审核中的商品
*/
public function auditByPage(){
$m = new M();
$rs = $m->auditByPage();
$rs['status'] = 1;
return $rs;
}
/**
* 获取仓库中的商品
*/
public function storeByPage(){
$m = new M();
$rs = $m->storeByPage();
$rs['status'] = 1;
return $rs;
}
/**
* 违规商品
*/
public function illegal(){
return $this->fetch('shops/goods/list_illegal');
}
/*
* 设置商品特定价格
* */
public function limitPrice(){
$shopId=(int)session('WST_USER.shopId');
$where['shopId'] = $shopId;
$where['goodsStatus'] = 1;
$where['dataFlag'] = 1;
$where['isSale'] = 1;
if (Request()->isPost()) {
$goodsType = input('goodsType');
if ($goodsType != '') $where['goodsType'] = (int)$goodsType;
$c1Id = (int)input('cat1');
$c2Id = (int)input('cat2');
$goodsName = input('goodsName');
if ($goodsName != '') {
$where['goodsName'] = ['like', "%$goodsName%"];
}
if ($c2Id != 0 && $c1Id != 0) {
$where['shopCatId2'] = $c2Id;
} else if ($c1Id != 0) {
$where['shopCatId1'] = $c1Id;
}
}
$lists=db('goods')->where($where)->field('goodsId,goodsName,goodsType')->select();
//dump($lists);
if (Request()->isAjax()) {
//dump($lists);
exit(json_encode(WSTReturn('',1,$lists)));
}
$this->assign('lists',$lists);
return $this->fetch('shops/goods/list_limitprice');
}
//获取商品货号
public function getGoodsProduct(){
$goodsId = (int)input('goodsId');
$res['specs'] = db('goods_specs')->where(['goodsId'=>$goodsId])->field('productNo,specIds')->select();
$res['goods'] = db('goods')->where(['goodsId'=>$goodsId])->field('marketPrice')->find();
// dump($res);die;
exit(json_encode($res));
}
//获取商品规格
public function getGoodsSpecs(){
$productNo = input('productNo');
$res = db('goods_specs')->where(['productNo'=>$productNo])->field('specIds,marketPrice')->find();
$specs = explode(':',$res['specIds']);
$data = db('spec_items')->where(['itemId'=>['in',$specs]])->select();
$rs['itemName'] = implode(',',array_column($data,'itemName'));
$rs['marketPrice'] = $res['marketPrice'];
exit(json_encode($rs));
}
/**
* 获取违规的商品
*/
public function illegalByPage(){
$m = new M();
$rs = $m->illegalByPage();
$rs['status'] = 1;
return $rs;
}
/**
* 获取已设置限时价格的商品
*/
public function limitPriceByPage(){
$m = new M();
$rs = $m->limitPriceByPage();
$rs['status'] = 1;
return $rs;
}
/**
* 获取指定显示价格的商品的商品
*/
public function getLimitGoods(){
$m = new M();
$rs = $m->getLimitGoods();
return $rs;
}
/**
* 跳去新增限时价格商品页面
*/
public function addLimitGoods(){
$m = new M();
$rs = $m->addLimitGoods();
return $rs;
}
/**
* 跳去编辑限时价格商品页面
*/
public function editLimitGoods(){
$m = new M();
$rs = $m->editLimitGoods();
return $rs;
}
/**
* 删除显示价格商品
*/
public function delLimitGoods(){
$m = new M();
$rs = $m->delLimitGoods();
return $rs;
}
/**
* 跳去新增页面
*/
public function add(){
$m = new M();
$object = $m->getEModel('goods');
$shopId=(int)session('WST_USER.shopId');
// $object['pay']=db('shop_pay')->where(['shopId'=>$shopId,'status'=>1])->find();
// $object['isEct']=0;
$object['ectPayRatio'] = db('payments')->where(['payCode'=>'ect'])->value('payRatio');
$object['goodsSn'] = WSTGoodsNo();
$object['productNo'] = WSTGoodsNo();
$object['goodsImg'] = WSTConf('CONF.goodsLogo');
$object['ectPay']=0;//db('goods')->alias('g')->join('goods_ectpay ge','ge.goodsId=g.goodsId','left')->value('ectPay');
$object['alone'] =0;
$object['basicsMoney'] = 0;
$aloneShop = db('alone_shops')->alias('as')->join('__SHOPS__ s','as.shopId=s.shopId')->where(['as.dataFlag'=>'1','as.shopId'=>$shopId])->value('as.shopId');
if($aloneShop){
$object['alone'] =1;
}
//dump($object);
$data = ['object'=>$object,'src'=>'add'];
return $this->fetch('shops/goods/edit',$data);
}
/**
* 新增商品
*/
public function toAdd(){
$m = new M();
return $m->add();
}
/**
* 跳去编辑页面
*/
public function edit(){
$m = new M();
$object = $m->getById(input('get.id'));
$shopId=(int)session('WST_USER.shopId');
// $object['pay']=db('shop_pay')->where(['shopId'=>$shopId,'status'=>1])->find();
// //$object['pay']=1;
// if($object['pay']){
// $object['isEct']=db('goods_pay')->where('goodsId',$object['goodsId'])->value('ectPay');
// //$object['isOnline']=db('goods_pay')->where('goodsId',$object['goodsId'])->value('onlinePay');
// }
$object['ectPayRatio'] = db('payments')->where(['payCode'=>'ect'])->value('payRatio');
if($object['goodsImg']=='')$object['goodsImg'] = WSTConf('CONF.goodsLogo');
$object['ectPay']=0;
if($object['basicsMoney'] == '') $object['basicsMoney'] = 0;
$object['alone'] =0;
$aloneShop = db('alone_shops')->alias('as')->join('__SHOPS__ s','as.shopId=s.shopId')->where(['as.dataFlag'=>'1','as.shopId'=>$shopId])->value('as.shopId');
if($aloneShop){
$object['alone'] =1;
}
$data = ['object'=>$object,'src'=>input('src')];
return $this->fetch('shops/goods/edit',$data);
}
/**
* 编辑商品
*/
public function toEdit(){
$m = new M();
return $m->edit();
}
/**
* 删除商品
*/
public function del(){
$m = new M();
return $m->del();
}
/**
* 获取商品规格属性
*/
public function getSpecAttrs(){
$m = new M();
return $m->getSpecAttrs();
}
/**
* 进行商品搜索
*/
public function search(){
//获取商品记录
$m = new M();
$data = [];
$data['isStock'] = Input('isStock/d');
$data['isNew'] = Input('isNew/d');
$data['isFreeShipping'] = input('isFreeShipping/d');
$data['orderBy'] = Input('orderBy/d');
$data['order'] = Input('order/d',1);
$data['keyword'] = input('keyword');
$data['sprice'] = Input('sprice/d');
$data['eprice'] = Input('eprice/d');
$data['areaId'] = (int)Input('areaId');
$aModel = model('home/areas');
// 获取地区
$data['area1'] = $data['area2'] = $data['area3'] = $aModel->listQuery(); // 省级
// 如果有筛选地区 获取上级地区信息
if($data['areaId']!==0){
$areaIds = $aModel->getParentIs($data['areaId']);
/*
2 => int 440000
1 => int 440100
0 => int 440106
*/
$selectArea = [];
$areaName = '';
foreach($areaIds as $k=>$v){
$a = $aModel->getById($v);
$areaName .=$a['areaName'];
$selectArea[] = $a;
}
// 地区完整名称
$selectArea['areaName'] = $areaName;
// 当前选择的地区
$data['areaInfo'] = $selectArea;
$data['area2'] = $aModel->listQuery($areaIds[2]); // 广东的下级
$data['area3'] = $aModel->listQuery($areaIds[1]); // 广州的下级
}
$data['goodsPage'] = $m->pageQuery();
return $this->fetch("goods_search",$data);
}
/**
* 获取商品列表
*/
public function lists(){
$catId = Input('cat/d');
$goodsCatIds = model('GoodsCats')->getParentIs($catId);
reset($goodsCatIds);
//填充参数
$data = [];
$data['catId'] = $catId;
$data['isStock'] = Input('isStock/d');
$data['isNew'] = Input('isNew/d');
$data['isFreeShipping'] = input('isFreeShipping/d');
$data['orderBy'] = Input('orderBy/d');
$data['order'] = Input('order/d',1);
$data['sprice'] = Input('sprice');
$data['eprice'] = Input('eprice');
$data['attrs'] = [];
$data['areaId'] = (int)Input('areaId');
$aModel = model('home/areas');
// 获取地区
$data['area1'] = $data['area2'] = $data['area3'] = $aModel->listQuery(); // 省级
// 如果有筛选地区 获取上级地区信息
if($data['areaId']!==0){
$areaIds = $aModel->getParentIs($data['areaId']);
/*
2 => int 440000
1 => int 440100
0 => int 440106
*/
$selectArea = [];
$areaName = '';
foreach($areaIds as $k=>$v){
$a = $aModel->getById($v);
$areaName .=$a['areaName'];
$selectArea[] = $a;
}
// 地区完整名称
$selectArea['areaName'] = $areaName;
// 当前选择的地区
$data['areaInfo'] = $selectArea;
$data['area2'] = $aModel->listQuery($areaIds[2]); // 广东的下级
$data['area3'] = $aModel->listQuery($areaIds[1]); // 广州的下级
}
$vs = input('vs');
$vs = ($vs!='')?explode(',',$vs):[];
foreach ($vs as $key => $v){
if($v=='' || $v==0)continue;
$v = (int)$v;
$data['attrs']['v_'.$v] = input('v_'.$v);
}
$data['vs'] = $vs;
$brandIds = Input('brand');
$bgIds = [];// 品牌下的商品Id
if(!empty($vs)){
// 存在筛选条件,取出符合该条件的商品id,根据商品id获取可选品牌
$goodsId = model('goods')->filterByAttributes();
$data['brandFilter'] = model('Brands')->canChoseBrands($goodsId);
}else{
// 取出分类下包含商品的品牌
$data['brandFilter'] = model('Brands')->goodsListQuery((int)current($goodsCatIds));
}
if(!empty($brandIds))$bgIds = model('Brands')->getGoodsIds($brandIds);
$data['price'] = Input('price');
//封装当前选中的值
$selector = [];
//处理品牌
$brandIds = explode(',',$brandIds);
$bIds = $brandNames = [];
foreach($brandIds as $bId){
if($bId>0){
foreach ($data['brandFilter'] as $key =>$v){
if($v['brandId']==$bId){
array_push($bIds, $v['brandId']);
array_push($brandNames, $v['brandName']);
}
}
$selector[] = ['id'=>join(',',$bIds),'type'=>'brand','label'=>"品牌","val"=>join('、',$brandNames)];
}
}
// 当前是否有品牌筛选
if(!empty($selector)){
$_s[] = $selector[count($selector)-1];
$selector = $_s;
unset($data['brandFilter']);
}
$data['brandId'] = Input('brand');
//处理价格
if($data['sprice']!='' && $data['eprice']!=''){
$selector[] = ['id'=>0,'type'=>'price','label'=>"价格","val"=>$data['sprice']."-".$data['eprice']];
}
if($data['sprice']!='' && $data['eprice']==''){
$selector[] = ['id'=>0,'type'=>'price','label'=>"价格","val"=>$data['sprice']."以上"];
}
if($data['sprice']=='' && $data['eprice']!=''){
$selector[] = ['id'=>0,'type'=>'price','label'=>"价格","val"=>"0-".$data['eprice']];
}
//处理已选属性
$goodsFilter = model('Attributes')->listQueryByFilter($catId);
$ngoodsFilter = [];
if(!empty($vs)){
// 存在筛选条件,取出符合该条件的商品id,根据商品id获取可选属性进行拼凑
$goodsId = model('goods')->filterByAttributes();
// 如果同时有筛选品牌,则与品牌下的商品Id取交集
if(!empty($bgIds))$goodsId = array_intersect($bgIds,$goodsId);
$attrs = model('Attributes')->getAttribute($goodsId);
// 去除已选择属性
foreach ($attrs as $key =>$v){
if(!in_array($v['attrId'],$vs))$ngoodsFilter[] = $v;
}
}else{
if(!empty($bgIds))$goodsFilter = model('Attributes')->getAttribute($bgIds);// 存在品牌筛选
// 当前无筛选条件,取出分类下所有属性
foreach ($goodsFilter as $key =>$v){
if(!in_array($v['attrId'],$vs))$ngoodsFilter[] = $v;
}
}
if(count($vs)>0){
$_vv = [];
$_attrArr = [];
foreach ($goodsFilter as $key =>$v){
if(in_array($v['attrId'],$vs)){
foreach ($v['attrVal'] as $key2 =>$vv){
if(strstr(input('v_'.$v['attrId']),$vv)!==false){
array_push($_vv, $vv);
$_attrArr[$v['attrId']]['attrName'] = $v['attrName'];
$_attrArr[$v['attrId']]['val'] = $_vv;
}
}
$_vv = [];
}
}
foreach($_attrArr as $k1=>$v1){
$selector[] = ['id'=>$k1,'type'=>'v_'.$k1,'label'=>$v1['attrName'],"val"=>join('、',$v1['val'])];
}
}
$data['selector'] = $selector;
$data['goodsFilter'] = $ngoodsFilter;
//获取商品记录
$m = new M();
$data['priceGrade'] = $m->getPriceGrade($goodsCatIds);
$data['goodsPage'] = $m->pageQuery($goodsCatIds);
$catPaths = model('goodsCats')->getParentNames($catId);
$data['catNamePath'] = '全部商品分类';
if(!empty($catPaths))$data['catNamePath'] = implode(' - ',$catPaths);
// 商品分类下级
$where = ['parentId'=>0,'dataFlag'=>1];
if($catId!='')$where['parentId']=$catId;
$goodsCats = model('goodsCats')->field('catId,catName')->where($where)->select();
$this->assign('goodsCats',$goodsCats);
return $this->fetch("goods_list",$data);
}
/**
* 查看商品详情
*/
public function detail(){
$m = new M();
$goods = $m->getBySale(input('id/d',0));
$key=input('key');
if(!empty($goods)){
//判断是否药品
$goods_cat=strpos($goods['goodsCatIdPath'],'389');
if($goods_cat!==false && $key==''){
return $this->fetch("error_lost");
}
if((int)session('WST_USER.userId')!=""){
$history_data['userId']=(int)session('WST_USER.userId');
$history_data['goodsId']=$goods['goodsId'];
$history_data['path']='1';
$history_data['create_time']=time();
$result=db('page_view')->insert($history_data);
}
$history = cookie("history_goods");
$history = is_array($history)?$history:[];
array_unshift($history, (string)$goods['goodsId']);
$history = array_values(array_unique($history));
if(!empty($history)){
cookie("history_goods",$history,25920000);
}
// 商品详情延迟加载
$goods['goodsDesc']=htmlspecialchars_decode($goods['goodsDesc']);
//修改匹配规则 适应oss 地址 mark 20180615 by zl
// $rule = '/<img src="\/(upload.*?)"/';
$rule = '/<img src=".*?\/(upload.*?)"/';
preg_match_all($rule, $goods['goodsDesc'], $images);
foreach($images[0] as $k=>$v){
//mark by cheng商品详情换成远程oss图片20180313
//$goods['goodsDesc'] = str_replace($v, "<img class='goodsImg' data-original=\"__ROOT__/".WSTImg($images[1][$k],3)."\"", $goods['goodsDesc']);
$goods['goodsDesc'] = str_replace($v, "<img class='goodsImg' data-original=\"__IMGURL__/".WSTImg($images[1][$k],0)."\"", $goods['goodsDesc']);
}
hook('afterGetGoods',['params'=>&$goods]);
$goods['is_seckilling']=isset($goods['is_seckilling'])?$goods['is_seckilling']:0;
$this->assign('goods',$goods);
$this->assign('shop',$goods['shop']);
return $this->fetch("goods_detail");
}else{
return $this->fetch("error_lost");
}
}
/**
* 预警库存
*/
public function stockwarnbypage(){
return $this->fetch("shops/stockwarn/list");
}
/**
* 获取预警库存列表
*/
public function stockByPage(){
$m = new M();
$rs = $m->stockByPage();
$rs['status'] = 1;
return $rs;
}
/**
* 修改预警库存
*/
public function editwarnStock(){
$m = new M();
return $m->editwarnStock();
}
/**
* 获取商品浏览记录
*/
public function historyByGoods(){
$rs = model('Tags')->historyByGoods(8);
return WSTReturn('',1,$rs);
}
/**
* 记录对比商品
*/
public function contrastGoods(){
$id = (int)input('post.id');
$contras = cookie("contras_goods");
if($id>0){
$m = new M();
$goods = $m->getBySale($id);
$catId = explode('_',$goods['goodsCatIdPath']);
$catId = $catId[0];
if(isset($contras['catId']) && $catId!=$contras['catId'])return WSTReturn('请选择同分类对比',-1);
if(isset($contras['list']) && count($contras['list'])>3)return WSTReturn('对比栏已满',-1);
if(!isset($contras['catId']))$contras['catId'] = $catId;
$contras['list'][$id] = $id;
cookie("contras_goods",$contras,25920000);
}
if(isset($contras['list'])){
$m = new M();
$list = [];
foreach($contras['list'] as $k=>$v){
$list[] = $m->getBySale($v);
}
return WSTReturn('',1,$list);
}else{
return WSTReturn('',1);
}
}
/**
* 删除对比商品
*/
public function contrastDel(){
$id = (int)input('post.id');
$contras = cookie("contras_goods");
if($id>0 && isset($contras['list'])){
unset($contras['list'][$id]);
cookie("contras_goods",$contras,25920000);
}else{
cookie("contras_goods", null);
}
return WSTReturn('删除成功',1);
}
/**
* 商品对比
*/
public function contrast(){
$contras = cookie("contras_goods");
$list = [];
$list = $lists= $saleSpec = $shop = $score = $brand = $spec = [];
if(isset($contras['list'])){
$m = new M();
foreach($contras['list'] as $key=>$value){
$dara = $m->getBySale($value);
if(isset($dara['saleSpec'])){
foreach($dara['saleSpec'] as $ks=>$vs){
if($vs['isDefault']==1){
$dara['defaultSpec'] = $vs;
$dara['defaultSpec']['ids'] = explode(':',$ks);
}
}
$saleSpec[$value] = $dara['saleSpec'];
}
$list[] = $dara;
}
//第一个商品信息
$goods = $list[0];
//对比处理
$shops['identical'] = $scores['identical'] = $brands['identical'] = 1;
foreach($list as $k=>$v){
$shop[$v['goodsId']] = $v['shop']['shopName'];
if($goods['shop']['shopId']!=$v['shop']['shopId'])$shops['identical'] = 0;
$score[$v['goodsId']] = $v['scores']['totalScores'];
if($goods['scores']['totalScores']!=$v['scores']['totalScores'])$scores['identical'] = 0;
$brand[$v['goodsId']] = $v['brandName'];
if($goods['brandId']!=$v['brandId'])$brands['identical'] = 0;
if(isset($v['spec'])){
foreach($v['spec'] as $k2=>$v2){
$spec[$k2]['identical'] = 0;
$spec[$k2]['type'] = 'spec';
$spec[$k2]['name'] = $v2['name'];
$spec[$k2]['catId'] = $k2;
foreach($v2['list'] as $ks22=>$vs22){
$v['spec'][$k2]['list'][$ks22]['isDefault'] = (in_array($vs22['itemId'],$v['defaultSpec']['ids']))?1:0;
}
$spec[$k2]['info'][$v['goodsId']] = $v['spec'][$k2];
}
}
}
$shops['name'] = '店铺';
$shops['type'] = 'shop';
$shops['info'] = $shop;
$lists[] = $shops;
$scores['name'] = '商品评分';
$scores['type'] = 'score';
$scores['info'] = $score;
$lists[] = $scores;
$brands['name'] = '品牌';
$brands['type'] = 'brand';
$brands['info'] = $brand;
$lists[] = $brands;
foreach($spec as $k3=>$v3){
$lists[] = $v3;
}
}
$data['list'] = $list;
$data['lists'] = $lists;
$data['saleSpec'] = $saleSpec;
$this->assign('data',$data);
return $this->fetch("goods_contrast");
}
}