2019-09-06 23:53:10 +08:00

148 lines
7.0 KiB
PHP
Executable File

<?php
namespace wstmart\home\model;
use think\Db;
use think\Loader;
/**
* ============================================================================
* 导入类
*/
class Imports{
/**
* 上传商品数据
*/
public function importGoods($data){
Loader::import('phpexcel.PHPExcel.IOFactory');
$objReader = \PHPExcel_IOFactory::load(WSTRootPath().json_decode($data)->route.json_decode($data)->name);
$objReader->setActiveSheetIndex(0);
$sheet = $objReader->getActiveSheet();
$rows = $sheet->getHighestRow();
$cells = $sheet->getHighestColumn();
//数据集合
$readData = [];
$shopId = (int)session('WST_USER.shopId');
$importNum = 0;
$goodsCatMap = []; //记录最后一级商品分类
$goodsCatPathMap = [];//记录商品分类路径
$shopCatMap = [];//记录店铺分类
$goodsCat1Map = [];//记录最后一级商品分类对应的一级分类
$tmpGoodsCatId = 0;
$goodsCatBrandMap = [];//商品分类和品牌的对应关系
//生成订单
Db::startTrans();
try{
//循环读取每个单元格的数据
for ($row = 3; $row <= $rows; $row++){//行数是以第3行开始
$tmpGoodsCatId = 0;
$goods = [];
$goods['shopId'] = $shopId;
$goods['goodsName'] = trim($sheet->getCell("A".$row)->getValue());
if($goods['goodsName']=='')break;//如果某一行第一列为空则停止导入
$goods['goodsSn'] = trim($sheet->getCell("B".$row)->getValue());
$goods['productNo'] = trim($sheet->getCell("C".$row)->getValue());
$goods['marketPrice'] = trim($sheet->getCell("D".$row)->getValue());
if(floatval($goods['marketPrice'])<0.01)$goods['marketPrice'] = 0.01;
$goods['shopPrice'] = trim($sheet->getCell("E".$row)->getValue());
if(floatval($goods['shopPrice'])<0.01)$goods['shopPrice'] = 0.01;
$goods['goodsStock'] = trim($sheet->getCell("F".$row)->getValue());
if(intval($goods['goodsStock'])<=0)$goods['goodsStock'] = 0;
$goods['warnStock'] = trim($sheet->getCell("G".$row)->getValue());
if(intval($goods['warnStock'])<=0)$goods['warnStock'] = 0;
$goods['goodsImg'] = '';
$goods['shopCatId1'] = 0;
$goods['shopCatId2'] = 0;
$goods['goodsUnit'] = trim($sheet->getCell("H".$row)->getValue());
$goods['goodsSeoKeywords'] = trim($sheet->getCell("I".$row)->getValue());
$goods['goodsTips'] = trim($sheet->getCell("J".$row)->getValue());
$goods['isRecom'] = (trim($sheet->getCell("K".$row)->getValue())!='')?1:0;
$goods['isBest'] = (trim($sheet->getCell("L".$row)->getValue())!='')?1:0;
$goods['isNew'] = (trim($sheet->getCell("M".$row)->getValue())!='')?1:0;
$goods['isHot'] = (trim($sheet->getCell("N".$row)->getValue())!='')?1:0;
$goods['goodsCatId'] = 0;
//查询商城分类
$goodsCat = trim($sheet->getCell("O".$row)->getValue());
if(!empty($goodsCat)){
//先判断集合是否存在,不存在的时候才查数据库
if(isset($goodsCatMap[$goodsCat])){
$goods['goodsCatId'] = $goodsCatMap[$goodsCat];
$goods['goodsCatIdPath'] = $goodsCatPathMap[$goodsCat];
$tmpGoodsCatId = $goodsCat1Map[$goodsCat];
}else{
$goodsCatId = Db::name('goods_cats')->where(['catName'=>$goodsCat,'dataFlag'=>1])->field('catId')->find();
if(!empty($goodsCatId['catId'])){
$goodsCats = model('GoodsCats')->getParentIs($goodsCatId['catId']);
$goods['goodsCatId'] = $goodsCatId['catId'];
$goods['goodsCatIdPath'] = implode('_',$goodsCats)."_";
//放入集合
$goodsCatMap[$goodsCat] = $goodsCatId['catId'];
$goodsCatPathMap[$goodsCat] = implode('_',$goodsCats)."_";
$goodsCat1Map[$goodsCat] = $goodsCats[0];
$tmpGoodsCatId = $goodsCats[0];
}
}
}
//查询店铺分类
$shopGoodsCat = trim($sheet->getCell("P".$row)->getValue());
if(!empty($shopGoodsCat)){
//先判断集合是否存在,不存在的时候才查数据库
if(isset($shopCatMap[$shopGoodsCat])){
$goods['shopCatId1'] = $shopCatMap[$shopGoodsCat]['s1'];
$goods['shopCatId2'] = $shopCatMap[$shopGoodsCat]['s2'];
}else{
$shopCat= Db::name("shop_cats")->alias('sc1')
->join('__SHOP_CATS__ sc2','sc2.parentId=sc1.catId','left')
->field('sc1.catId catId1,sc2.catId catId2,sc2.catName')
->where(['sc1.shopId'=> $shopId,'sc1.dataFlag'=>1,'sc2.catName'=>$shopGoodsCat])
->find();
if(!empty($shopCat)){
$goods['shopCatId1'] = $shopCat['catId1'];
$goods['shopCatId2'] = $shopCat['catId2'];
//放入集合
$shopCatMap[$shopGoodsCat] = [];
$shopCatMap[$shopGoodsCat]['s1'] = $goods['shopCatId1'];
$shopCatMap[$shopGoodsCat]['s2'] = $goods['shopCatId2'];
}
}
}
//查询品牌
$brand = trim($sheet->getCell("Q".$row)->getValue());
if(!empty($brand)){
if(isset($goodsCatBrandMap[$brand])){
$goods['brandId'] = $goodsCatBrandMap[$brand];
}else{
$brands = Db::name('brands')->alias('a')->join('__CAT_BRANDS__ cb','a.brandId=cb.brandId','inner')
->where(['catId'=>$tmpGoodsCatId,'brandName'=>$brand,'dataFlag'=>1])->field('a.brandId')->find();
if(!empty($brands)){
$goods['brandId'] = $brands['brandId'];
$goodsCatBrandMap[$brand] = $brands['brandId'];
}
}
}
$goods['goodsDesc'] = trim($sheet->getCell("R".$row)->getValue());
$goods['isSale'] = 0;
$goods['goodsStatus'] = (WSTConf("CONF.isGoodsVerify")==1)?0:1;
$goods['dataFlag'] = 1;
$goods['saleTime'] = date('Y-m-d H:i:s');
$goods['createTime'] = date('Y-m-d H:i:s');
$readData[] = $goods;
$importNum++;
}
if(count($readData)>0){
$list = model('Goods')->saveAll($readData);
//建立商品评分记录
$goodsScores = [];
foreach ($list as $key =>$v){
$gs = [];
$gs['goodsId'] = $v['goodsId'];
$gs['shopId'] = $shopId;
$goodsScores[] = $gs;
}
if(count($goodsScores)>0)Db::name('goods_scores')->insertAll($goodsScores);
}
Db::commit();
return json_encode(['status'=>1,'importNum'=>$importNum]);
}catch (\Exception $e) {
Db::rollback();errLog($e);
return json_encode(WSTReturn('导入商品失败',-1));
}
}
}