//代码块一 
 foreach ($arrCSV as $v) {
            $key++;
            $goodsId[] = $v[0];  //序号ID
            $goodsEmpty[] = $v[1];  //货号
            $catEmpty[] = $v[2];   //分类
            $drug_typeEmpty[] = $v[3];//药物类型
            $nameEmpty[] = $v[4];    //商品名称
            $sub_titleEmpty[] = $v[5]; //商品副标题
            $unitEmpty[] = $v[6];    //单位
            $sortEmpty[] = $v[7];    //排序
            $virtual_salesEmpty[] = $v[8];  //虚拟数量
            $confine_countEmpty[] = $v[9];   //限购数量
            $weightEmpty[] = $v[10];    //重量
            $priceEmpty[] = $v[11];     //售价
            $cost_priceEmpty[] = $v[12];   //成本价
            $original_priceEmpty[] = $v[13];     //原价
            $serviceEmpty[] = $v[14];     //服务内容
            $freightEmpty[] = $v[15];     //运费设置
            $piecesEmpty[] = $v[16];   //单品满件包邮
            $foreheadEmpty[] = $v[17];   //单品满额包邮
            $appr_numberEmpty[] = $v[18];   //国药准字
            $specEmpty[] = $v[19];   //规格
            $factory_nameEmpty[] = $v[20];   //生产厂家
            $is_levelEmpty[] = $v[21];   //是否享受会员折扣
            $giveEmpty[] = $v[22];   //积分赠送
            $integralforeheadEmpty[] = $v[23];   //积分抵扣
            $integralmoreEmpty[] = $v[24];   //允许多件累计折扣
            $individual_shareEmpty[] = $v[26];   //是否开启单独推广设置,暂时默认不开启
            $share_typeEmpty[] = $v[27];  //开启单独推广设置,0为百分比,1为固定佣金
            $share_commission_firstEmpty[] = $v[28];   //一级佣金
            $share_commission_secondEmpty[] = $v[29];   //二级佣金
            $share_commission_thirdEmpty[] = $v[30];   //三级佣金
            $quick_purchaseEmpty[] = $v[31];   //是否添加到快速购买 ,TODO热销
            $hot_cakesEmpty[] = $v[32];   //是添加到快速购买中,热销1,非热销0
            $detailEmpty[] = $v[33];   //图文详情
            $stockEmpty[] = $v[34];  //导入数量
            $bar_codeEmpty[] =$v[35];  //条形码
            $error[$key];
            //region Mr.DJ 过滤处理
            if (empty($v[0]) && empty($v[1])) {
                $error[$key] = '商品ID和商品货号不能为空';
                $errorCount += 1;
                continue;
            }

            $goodsModel = Goods::find()->where([
                'store_id' => $this->store_id,
                'is_delete' => 0,
                'mch_id' => 0,
                'type' => $type
            ]);
            if (!empty($v[0])) {
                $goods = $goodsModel->andWhere(
                    ['id' => $v[0]]
                )->one();
                if (!$goods) {
                    $error[$key] = '商品ID不存在';
                    $errorCount += 1;
                    continue;
                }
            }
            if (!empty($v[1]) && empty($v[0])) {
                $goods = $goodsModel->andWhere(
                    ['like', 'attr', '"no":"' . $v[1] . '"',]
                )->one();
                if (!$goods) {
                    $error[$key] = '商品货号不存在';
                    $errorCount += 1;
                    continue;
                }
            }
//            if(empty($goods)){
//                $error[$key] = '商品货号、商品ID非本系统数据,请检查';
//                $errorCount += 1;
//                continue;
//            }
            $data1 = json_decode($goods['full_cut'], true);
            $data = json_decode($goods['integral'], true);
            if (!empty($v[2]) && !array_key_exists(trim($v[2]), $store_cat)) {
                $error[$key] = '该分类不存在(或商品分类单次只能插入一个)';
                $errorCount += 1;
                continue;
            }
            //2020年4月26日13:23:08
            if (!empty($v[3])) {
                if (!array_key_exists(trim($v[3]), $drug_type_arr) || (trim($v[3]) == '单轨处方药' && (!isset($v[19]) || !isset($v[20]) || !isset($v[21])))) {
                    $error[$key] = '药物类型不能为空,当是单轨处方药:国药准字,规格,生产厂家均不能为空';
                    $errorCount += 1;
                    continue;
                }
            }
            if (!empty($v[7])&&!is_numeric($v[7])) {
                $error[$key] = '排序是数字';
                $errorCount += 1;
                continue;
            }
            if (!empty($v[12]) && !is_numeric($v[12]) || intval($v[12]) < 0) {
                $error[$key] = '成本价不能为空';
                $errorCount += 1;
                continue;
            }
            if (!empty($v[13]) && !is_numeric($v[13]) || intval($v[13]) < 0) {
                $error[$key] = '原价不能为空';
                $errorCount += 1;
                continue;
            }
            //英文逗号!!!
            if (!empty($v[14])) {
                $v[14] = str_replace('|', ',', $v[14]);
            }
            if (!empty($v[15]) && !array_key_exists($v[15], $postageRiles)) {
                $error[$key] = '该商户无该运费设置';
                $errorCount += 1;
                continue;
            }
            if (!empty($v[22]) && !array_key_exists($v[22], $is_user)) {
                $error[$key] = '是否享受会员折扣,只能填是或否或不填';
                $errorCount += 1;
                continue;
            }

            if (empty($v[25])) {

            }elseif (!empty($v[25]) && !array_key_exists(trim($v[25]), $_is_duojian)) {
                $error[$key] = '是否允许多件累计抵扣,只能填是或否';
                $errorCount += 1;
                continue;
            }

            if (empty($v[18])) {

            }elseif (!empty($v[18]) && !array_key_exists(trim($v[18]), $_is_face)) {
                $error[$key] = '是否面议,只能填是或否';
                $errorCount += 1;
                continue;
            }

            if (!empty($v[26]) && !array_key_exists($v[26], $_tuiguang)) {
                $error[$key] = '是否开启单独推广设置,只能填是或否';
                $errorCount += 1;
                continue;
            }
            if (!empty($v[27]) && !array_key_exists($v[27], $_guiguang_persent)) {
                $error[$key] = '开启单独推广之后,只能填0或1';
                $errorCount += 1;
                continue;
            }
            if (($_tuiguang[$v[26]] == 1 && ($v[27] != '0' && $v[27] != '1')) && ($v[27] == '1' && (empty($v[28]) || empty($v[29]) || empty($v[30])))) {
                $error[$key] = '开启佣金,推广类型不正确;一,二,三级的佣金必须设置';
                $errorCount += 1;
                continue;
            }
            if (!empty($v[31]) && !array_key_exists($v[31], $_quick_buy)) {
                $error[$key] = '是否开启快速购买,只能填是或否';
                $errorCount += 1;
                continue;
            }
            if (!empty($v[31]) && !array_key_exists($v[32], $_hot_cake)) {
                $error[$key] = '是否热销,只能填是或否';
                $errorCount += 1;
                continue;
            }
            //endregion Mr.DJ 过滤处理
            $v[18] = !empty($v[18]) ? $_is_face[$v[18]] :$goods['is_negotiable'];
            $v[25] = !empty($v[25]) ? $_is_duojian[$v[25]] : $data['more'];
            $v[26] = !empty($v[26]) ? $_tuiguang[$v[26]] : '';
            $v[31] = !empty($v[31]) ? $_quick_buy[$v[31]] : '';
            $v[32] = !empty($v[32]) ? $_hot_cake[$v[32]] : '';

            //region Mr.DJ 后期循环优化
            if ($v[2] === '' || $v[2] === NULL) {
                $v[2] = $goods['cat_id'];
            }
            if ($v[3] === '' || $v[3] === NULL) {
                $v[3] = $goods['drug_type'];
            }
            if ($v[4] === '' || $v[4] === NULL) {
                $v[4] = $goods['name'];
            }
            if ($v[5] === '' || $v[5] === NULL) {
                $v[5] = $goods['sub_title'];
            }
            if ($v[6] === '' || $v[6] === NULL || empty($v[6])) {
                $v[6] = $goods['unit'];
            }
            if ($v[7] === '' || $v[7] === NULL) {
                $v[7] = $goods['sort'];  //排序
            }
            if ($v[8] === '' || $v[8] === NULL) {
                $v[8] = $goods['virtual_sales'];
            }
            if ($v[9] === '' || $v[9] === NULL) {
                $v[9] = $goods['confine_count'];
            }
            if ($v[10] === '' || $v[10] === NULL) {
                $v[10] = $goods['weight'];
            }
            if ($v[11] === '' || $v[11] === NULL) {
                $v[11] = $goods['price'];
            }
            if ($v[12] === '' || $v[12] === NULL) {
                $v[12] = $goods['cost_price'];
            }
            if ($v[13] === '' || $v[13] === NULL) {
                $v[13] = $goods['original_price'];
            }
            if ($v[14] === '' || $v[14] === NULL) {
                $v[14] = $goods['service'];
            }
            if ($v[15] === '' || $v[15] === NULL) {
                $v[15] = $goods['freight'];
            }
            if ($v[16] === '' || $v[16] === NULL) {
                $v[16] = $data1['pieces'];
            }
            if ($v[17] === '' || $v[17] === NULL) {
                $v[17] = $data1['forehead'];
            }
            if ($v[18] === '' || $v[18] === NULL) {
                $v[18] = $goods['is_negotiable'];
            }
            if ($v[19] === '' || $v[19] === NULL) {
                $v[19] = $goods['appr_number'];
            }
            if ($v[20] === '' || $v[20] === NULL) {
                $v[20] = $goods['spec'];
            }
            if ($v[21] === '' || $v[21] === NULL) {
                $v[21] = $goods['factory_name'];
            }
            if ($v[22] === '' || $v[22] === NULL) {
                $v[22] = $goods['is_level'];
            }
            if ($v[23] === '' || $v[23] === NULL) {
                $v[23] = $data['give'];
            }
            if ($v[24] === '' || $v[24] === NULL) {
                $v[24] = $data['forehead'];
            }
            if ($v[26] === '' || $v[26] === NULL) {
                $v[26] = $goods['individual_share'];
            }
            if ($v[27] === '' || $v[27] === NULL) {
                $v[27] = $goods['share_type'];
            }
            if ($v[28] === '' || $v[28] === NULL) {
                $v[28] = $goods['share_commission_first'];
            }
            if ($v[29] === '' || $v[29] === NULL) {
                $v[29] = $goods['share_commission_second'];
            }
            if ($v[30] === '' || $v[30] === NULL) {
                $v[30] = $goods['share_commission_third'];
            }
            if ($v[31] === '' || $v[31] === NULL) {
                $v[31] = $goods['quick_purchase'];
            }
            if ($v[32] === '' || $v[32] === NULL) {
                $v[32] = $goods['hot_cakes'];
            }
            if ($v[33] === '' || $v[33] === NULL) {
                $v[33] = $goods['detail'];
            }

            //增加商品条形码,如果条形码相同不更新。
            $where=[];
            if ($v[35]) {
                    $bar_code=json_decode($goods['attr'],true);
                    if(isset($bar_code[0]['bar_code']) && $bar_code[0]['bar_code']!=$v[35] ){
                         $bar_code[0]['bar_code']=$v[35];
                        $where['attr']=json_encode($bar_code,JSON_UNESCAPED_UNICODE);
                    }
                    unset($bar_code);
            }

            //endregion Mr.DJ 后期循
            $t = \Yii::$app->db->beginTransaction();
            $catId = empty($v[2]) ? $goods['cat_id'] : $store_cat[$v[2]];
            $cateInfo2 = GoodsCat::find()->where(['goods_id' => $goods['id'],'store_id'=>$this->store_id, 'is_delete' => 0])->select('cat_id')->asArray()->all();
            if(empty($cateInfo2)){
                if($goods['cat_id']!=$store_cat[$v[2]]){
                    $cateInfo = new GoodsCat();
                    $cateInfo->store_id = $goods['store_id'];
                    $cateInfo->goods_id = $goods['id'];
                    $cateInfo->cat_id = $goods['cat_id'];
                    $cateInfo->addtime = time();
                    $cateInfo->save();
                    $cateInfo = new GoodsCat();
                    $cateInfo->store_id = $goods['store_id'];
                    $cateInfo->goods_id = $goods['id'];
                    $cateInfo->cat_id =  $store_cat[$v[2]];
                    $cateInfo->addtime = time();
                    $cateInfo->save();
                }else{
                    $cateInfo = new GoodsCat();
                    $cateInfo->store_id = $goods['store_id'];
                    $cateInfo->goods_id = $goods['id'];
                    $cateInfo->cat_id =  $store_cat[$v[2]];
                    $cateInfo->addtime = time();
                    $cateInfo->save();
                }
            }elseif (!empty($cateInfo2)){
                $cateInfo1 = array_column($cateInfo2, 'cat_id', 'id');
                //print_r($cateInfo);die();
                if ($cateInfo1 && !in_array($catId, $cateInfo1)) {
                    $cateInfo = new GoodsCat();
                    $cateInfo->store_id = $goods['store_id'];
                    $cateInfo->goods_id = $goods['id'];
                    $cateInfo->cat_id = $catId;
                    $cateInfo->addtime = time();
                    $cateInfo->save();
                }
            }
            GoodsCat::deleteAll(['goods_id'=>$goods['id'],'is_delete'=>0,'cat_id'=>0,'store_id'=>$this->store_id]);
            GoodsCat::deleteAll(['goods_id'=>$goods['id'],'is_delete'=>0,'cat_id'=>null,'store_id'=>$this->store_id]); //去NULL
            if($goods['use_attr']){
                $attr=$goods['attr'];
            }

            $res = \Yii::$app->db->createCommand()->update(Goods::tableName(),
               array_merge([
                    'store_id' => $this->store_id,
                    'drug_type' => empty($drug_type_arr[$v[3]]) ? $goods['drug_type'] : $drug_type_arr[$v[3]],
                    'name' => empty($v[4]) ? $goods['name'] : $v[4],
                    'sub_title' => empty($v[5]) ? $goods['sub_title'] : $v[5],
                    'unit' => $v[6],
                    'sort' => $v[7],
                    'virtual_sales' => $v[8],
                    'confine_count' => $v[9],
                    'weight' => $v[10],
                    'use_attr'=>$goods['use_attr']?:0,
                    'price' => $v[11],
                    'cost_price' => $v[12],
                    'original_price' => $v[13],
                    'service' => empty($v[14]) ? $goods['service'] : $v[14],
                    'freight' => empty($postageRiles[$v[15]]) ? $goods['freight'] : $postageRiles[$v[15]],
                    'appr_number' => empty($v[19]) ? $goods['appr_number'] : $v[19],
                    'spec' => empty($v[20]) ? $goods['spec'] : $v[20],
                    'factory_name' => empty($v[21]) ? $goods['factory_name'] : $v[21],
                    'is_level' => !isset($is_user[$v[22]]) ? $goods['is_level'] : $is_user[$v[22]],
                    'full_cut' => '{"pieces":"' . $v[16] . '","forehead":"' . $v[17] . '"}',
                    'integral' => '{"give":"' . $v[23] . '","forehead":"' . $v[24] . '","more":"' . $v[25] . '"}',
                    'individual_share' => $v[26],
                    'share_type' => $v[27],
                    'share_commission_first' => $v[28],
                    'share_commission_second' => $v[29],
                    'share_commission_third' => $v[30],
                    'quick_purchase' => $v[31],
                    'hot_cakes' => $v[32],
                    'detail' => empty($v[33]) ? $goods['detail'] : $v[33],
                    'goods_num' => empty($v[34]) ? 0 : $v[34],
                    'is_negotiable' =>$v[18],//不开启面议
                    'addtime' => time(),
                ],$where),
                ['id' => $goods['id']]
            )->execute();
            try {
                if (!$res) {
                    $t->rollBack();
                    $error[$key] = '更新失败,或原数据未更改';
                    $errorCount += 1;
                } else {
                    $data_new = [];
                    //数字限制
                    if (is_numeric($v[34]) && $v[34] >= 0) {
                        $data_new['stock'] = $v[34];
                    }
                    if (trim($v[11]) >= 0 && $goods['price']!=trim($v['11']) ) {
                        $data_new['price'] = $v[11];
                    }
                    //存在商品条形码
                    if($v[35] && $where['attr']){
                        $where['attr']=substr($where['attr'],1,strlen($where['attr'])-2);
                        $data_new['attr'] = $where['attr'];
                        unset($where['attr']);
                    }
                    if ($data_new) {
                        Inventory::updateAll($data_new, ['goods_id' => $goods['id'], 'store_id' => $this->store->id]);
                        $t->commit();
                    }
                    $successCount += 1;
                }
            } catch (\Exception $e) {
                return $this->getErrors();
            }
        }
//代码块2
  foreach ($arrCSV as $v) {
            $key++;
            $goodsId[] = $v[0];  //序号ID
            $goodsEmpty[] = $v[1];  //货号
            $catEmpty[] = $v[2];   //分类
            $drug_typeEmpty[] = $v[3];//药物类型
            $nameEmpty[] = $v[4];    //商品名称
            $sub_titleEmpty[] = $v[5]; //商品副标题
            $unitEmpty[] = $v[6];    //单位
            $sortEmpty[] = $v[7];    //排序
            $virtual_salesEmpty[] = $v[8];  //虚拟数量
            $confine_countEmpty[] = $v[9];   //限购数量
            $weightEmpty[] = $v[10];    //重量
            $priceEmpty[] = $v[11];     //售价
            $cost_priceEmpty[] = $v[12];   //成本价
            $original_priceEmpty[] = $v[13];     //原价
            $serviceEmpty[] = $v[14];     //服务内容
            $freightEmpty[] = $v[15];     //运费设置
            $piecesEmpty[] = $v[16];   //单品满件包邮
            $foreheadEmpty[] = $v[17];   //单品满额包邮
            $appr_numberEmpty[] = $v[18];   //国药准字
            $specEmpty[] = $v[19];   //规格
            $factory_nameEmpty[] = $v[20];   //生产厂家
            $is_levelEmpty[] = $v[21];   //是否享受会员折扣
            $giveEmpty[] = $v[22];   //积分赠送
            $integralforeheadEmpty[] = $v[23];   //积分抵扣
            $integralmoreEmpty[] = $v[24];   //允许多件累计折扣
            $individual_shareEmpty[] = $v[26];   //是否开启单独推广设置,暂时默认不开启
            $share_typeEmpty[] = $v[27];  //开启单独推广设置,0为百分比,1为固定佣金
            $share_commission_firstEmpty[] = $v[28];   //一级佣金
            $share_commission_secondEmpty[] = $v[29];   //二级佣金
            $share_commission_thirdEmpty[] = $v[30];   //三级佣金
            $quick_purchaseEmpty[] = $v[31];   //是否添加到快速购买 ,TODO热销
            $hot_cakesEmpty[] = $v[32];   //是添加到快速购买中,热销1,非热销0
            $detailEmpty[] = $v[33];   //图文详情
            $stockEmpty[] = $v[34];  //导入数量
            $bar_codeEmpty[] =$v[35];  //条形码
            $error[$key];
            //region Mr.DJ 过滤处理
            if (empty($v[0]) && empty($v[1])) {
                $error[$key] = '商品ID和商品货号不能为空';
                $errorCount += 1;
                continue;
            }

            $goodsModel = Goods::find()->where([
                'store_id' => $this->store_id,
                'is_delete' => 0,
                'mch_id' => 0,
                'type' => $type
            ]);
            if (!empty($v[0])) {
                $goods = $goodsModel->andWhere(
                    ['id' => $v[0]]
                )->one();
                if (!$goods) {
                    $error[$key] = '商品ID不存在';
                    $errorCount += 1;
                    continue;
                }
            }
            if (!empty($v[1]) && empty($v[0])) {
                $goods = $goodsModel->andWhere(
                    ['like', 'attr', '"no":"' . $v[1] . '"',]
                )->one();
                if (!$goods) {
                    $error[$key] = '商品货号不存在';
                    $errorCount += 1;
                    continue;
                }
            }
//            if(empty($goods)){
//                $error[$key] = '商品货号、商品ID非本系统数据,请检查';
//                $errorCount += 1;
//                continue;
//            }
            $data1 = json_decode($goods['full_cut'], true);
            $data = json_decode($goods['integral'], true);
            if (!empty($v[2]) && !array_key_exists(trim($v[2]), $store_cat)) {
                $error[$key] = '该分类不存在(或商品分类单次只能插入一个)';
                $errorCount += 1;
                continue;
            }
            //2020年4月26日13:23:08
            if (!empty($v[3])) {
                if (!array_key_exists(trim($v[3]), $drug_type_arr) || (trim($v[3]) == '单轨处方药' && (!isset($v[19]) || !isset($v[20]) || !isset($v[21])))) {
                    $error[$key] = '药物类型不能为空,当是单轨处方药:国药准字,规格,生产厂家均不能为空';
                    $errorCount += 1;
                    continue;
                }
            }
            if (!empty($v[7])&&!is_numeric($v[7])) {
                $error[$key] = '排序是数字';
                $errorCount += 1;
                continue;
            }
            if (!empty($v[12]) && !is_numeric($v[12]) || intval($v[12]) < 0) {
                $error[$key] = '成本价不能为空';
                $errorCount += 1;
                continue;
            }
            if (!empty($v[13]) && !is_numeric($v[13]) || intval($v[13]) < 0) {
                $error[$key] = '原价不能为空';
                $errorCount += 1;
                continue;
            }
            //英文逗号!!!
            if (!empty($v[14])) {
                $v[14] = str_replace('|', ',', $v[14]);
            }
            if (!empty($v[15]) && !array_key_exists($v[15], $postageRiles)) {
                $error[$key] = '该商户无该运费设置';
                $errorCount += 1;
                continue;
            }
            if (!empty($v[22]) && !array_key_exists($v[22], $is_user)) {
                $error[$key] = '是否享受会员折扣,只能填是或否或不填';
                $errorCount += 1;
                continue;
            }

            if (empty($v[25])) {

            }elseif (!empty($v[25]) && !array_key_exists(trim($v[25]), $_is_duojian)) {
                $error[$key] = '是否允许多件累计抵扣,只能填是或否';
                $errorCount += 1;
                continue;
            }

            if (empty($v[18])) {

            }elseif (!empty($v[18]) && !array_key_exists(trim($v[18]), $_is_face)) {
                $error[$key] = '是否面议,只能填是或否';
                $errorCount += 1;
                continue;
            }

            if (!empty($v[26]) && !array_key_exists($v[26], $_tuiguang)) {
                $error[$key] = '是否开启单独推广设置,只能填是或否';
                $errorCount += 1;
                continue;
            }
            if (!empty($v[27]) && !array_key_exists($v[27], $_guiguang_persent)) {
                $error[$key] = '开启单独推广之后,只能填0或1';
                $errorCount += 1;
                continue;
            }
            if (($_tuiguang[$v[26]] == 1 && ($v[27] != '0' && $v[27] != '1')) && ($v[27] == '1' && (empty($v[28]) || empty($v[29]) || empty($v[30])))) {
                $error[$key] = '开启佣金,推广类型不正确;一,二,三级的佣金必须设置';
                $errorCount += 1;
                continue;
            }
            if (!empty($v[31]) && !array_key_exists($v[31], $_quick_buy)) {
                $error[$key] = '是否开启快速购买,只能填是或否';
                $errorCount += 1;
                continue;
            }
            if (!empty($v[31]) && !array_key_exists($v[32], $_hot_cake)) {
                $error[$key] = '是否热销,只能填是或否';
                $errorCount += 1;
                continue;
            }
            //endregion Mr.DJ 过滤处理
            $v[18] = !empty($v[18]) ? $_is_face[$v[18]] :$goods['is_negotiable'];
            $v[25] = !empty($v[25]) ? $_is_duojian[$v[25]] : $data['more'];
            $v[26] = !empty($v[26]) ? $_tuiguang[$v[26]] : '';
            $v[31] = !empty($v[31]) ? $_quick_buy[$v[31]] : '';
            $v[32] = !empty($v[32]) ? $_hot_cake[$v[32]] : '';

            //region Mr.DJ 后期循环优化
            if ($v[2] === '' || $v[2] === NULL) {
                $v[2] = $goods['cat_id'];
            }
            if ($v[3] === '' || $v[3] === NULL) {
                $v[3] = $goods['drug_type'];
            }
            if ($v[4] === '' || $v[4] === NULL) {
                $v[4] = $goods['name'];
            }
            if ($v[5] === '' || $v[5] === NULL) {
                $v[5] = $goods['sub_title'];
            }
            if ($v[6] === '' || $v[6] === NULL || empty($v[6])) {
                $v[6] = $goods['unit'];
            }
            if ($v[7] === '' || $v[7] === NULL) {
                $v[7] = $goods['sort'];  //排序
            }
            if ($v[8] === '' || $v[8] === NULL) {
                $v[8] = $goods['virtual_sales'];
            }
            if ($v[9] === '' || $v[9] === NULL) {
                $v[9] = $goods['confine_count'];
            }
            if ($v[10] === '' || $v[10] === NULL) {
                $v[10] = $goods['weight'];
            }
            if ($v[11] === '' || $v[11] === NULL) {
                $v[11] = $goods['price'];
            }
            if ($v[12] === '' || $v[12] === NULL) {
                $v[12] = $goods['cost_price'];
            }
            if ($v[13] === '' || $v[13] === NULL) {
                $v[13] = $goods['original_price'];
            }
            if ($v[14] === '' || $v[14] === NULL) {
                $v[14] = $goods['service'];
            }
            if ($v[15] === '' || $v[15] === NULL) {
                $v[15] = $goods['freight'];
            }
            if ($v[16] === '' || $v[16] === NULL) {
                $v[16] = $data1['pieces'];
            }
            if ($v[17] === '' || $v[17] === NULL) {
                $v[17] = $data1['forehead'];
            }
            if ($v[18] === '' || $v[18] === NULL) {
                $v[18] = $goods['is_negotiable'];
            }
            if ($v[19] === '' || $v[19] === NULL) {
                $v[19] = $goods['appr_number'];
            }
            if ($v[20] === '' || $v[20] === NULL) {
                $v[20] = $goods['spec'];
            }
            if ($v[21] === '' || $v[21] === NULL) {
                $v[21] = $goods['factory_name'];
            }
            if ($v[22] === '' || $v[22] === NULL) {
                $v[22] = $goods['is_level'];
            }
            if ($v[23] === '' || $v[23] === NULL) {
                $v[23] = $data['give'];
            }
            if ($v[24] === '' || $v[24] === NULL) {
                $v[24] = $data['forehead'];
            }
            if ($v[26] === '' || $v[26] === NULL) {
                $v[26] = $goods['individual_share'];
            }
            if ($v[27] === '' || $v[27] === NULL) {
                $v[27] = $goods['share_type'];
            }
            if ($v[28] === '' || $v[28] === NULL) {
                $v[28] = $goods['share_commission_first'];
            }
            if ($v[29] === '' || $v[29] === NULL) {
                $v[29] = $goods['share_commission_second'];
            }
            if ($v[30] === '' || $v[30] === NULL) {
                $v[30] = $goods['share_commission_third'];
            }
            if ($v[31] === '' || $v[31] === NULL) {
                $v[31] = $goods['quick_purchase'];
            }
            if ($v[32] === '' || $v[32] === NULL) {
                $v[32] = $goods['hot_cakes'];
            }
            if ($v[33] === '' || $v[33] === NULL) {
                $v[33] = $goods['detail'];
            }

            //增加商品条形码,如果条形码相同不更新。
            $where=[];
            if ($v[35]) {
                    $bar_code=json_decode($goods['attr'],true);
                    if(isset($bar_code[0]['bar_code']) && $bar_code[0]['bar_code']!=$v[35] ){
                         $bar_code[0]['bar_code']=$v[35];
                        $where['attr']=json_encode($bar_code,JSON_UNESCAPED_UNICODE);
                    }
                    unset($bar_code);
            }

            //endregion Mr.DJ 后期循
            $t = \Yii::$app->db->beginTransaction();
            $catId = empty($v[2]) ? $goods['cat_id'] : $store_cat[$v[2]];
            $cateInfo2 = GoodsCat::find()->where(['goods_id' => $goods['id'],'store_id'=>$this->store_id, 'is_delete' => 0])->select('cat_id')->asArray()->all();
            if(empty($cateInfo2)){
                if($goods['cat_id']!=$store_cat[$v[2]]){
                    $cateInfo = new GoodsCat();
                    $cateInfo->store_id = $goods['store_id'];
                    $cateInfo->goods_id = $goods['id'];
                    $cateInfo->cat_id = $goods['cat_id'];
                    $cateInfo->addtime = time();
                    $cateInfo->save();
                    $cateInfo = new GoodsCat();
                    $cateInfo->store_id = $goods['store_id'];
                    $cateInfo->goods_id = $goods['id'];
                    $cateInfo->cat_id =  $store_cat[$v[2]];
                    $cateInfo->addtime = time();
                    $cateInfo->save();
                }else{
                    $cateInfo = new GoodsCat();
                    $cateInfo->store_id = $goods['store_id'];
                    $cateInfo->goods_id = $goods['id'];
                    $cateInfo->cat_id =  $store_cat[$v[2]];
                    $cateInfo->addtime = time();
                    $cateInfo->save();
                }
            }elseif (!empty($cateInfo2)){
                $cateInfo1 = array_column($cateInfo2, 'cat_id', 'id');
                //print_r($cateInfo);die();
                if ($cateInfo1 && !in_array($catId, $cateInfo1)) {
                    $cateInfo = new GoodsCat();
                    $cateInfo->store_id = $goods['store_id'];
                    $cateInfo->goods_id = $goods['id'];
                    $cateInfo->cat_id = $catId;
                    $cateInfo->addtime = time();
                    $cateInfo->save();
                }
            }
            GoodsCat::deleteAll(['goods_id'=>$goods['id'],'is_delete'=>0,'cat_id'=>0,'store_id'=>$this->store_id]);
            GoodsCat::deleteAll(['goods_id'=>$goods['id'],'is_delete'=>0,'cat_id'=>null,'store_id'=>$this->store_id]); //去NULL
            if($goods['use_attr']){
                $attr=$goods['attr'];
            }

            $res = \Yii::$app->db->createCommand()->update(Goods::tableName(),
               array_merge([
                    'store_id' => $this->store_id,
                    'drug_type' => empty($drug_type_arr[$v[3]]) ? $goods['drug_type'] : $drug_type_arr[$v[3]],
                    'name' => empty($v[4]) ? $goods['name'] : $v[4],
                    'sub_title' => empty($v[5]) ? $goods['sub_title'] : $v[5],
                    'unit' => $v[6],
                    'sort' => $v[7],
                    'virtual_sales' => $v[8],
                    'confine_count' => $v[9],
                    'weight' => $v[10],
                    'use_attr'=>$goods['use_attr']?:0,
                    'price' => $v[11],
                    'cost_price' => $v[12],
                    'original_price' => $v[13],
                    'service' => empty($v[14]) ? $goods['service'] : $v[14],
                    'freight' => empty($postageRiles[$v[15]]) ? $goods['freight'] : $postageRiles[$v[15]],
                    'appr_number' => empty($v[19]) ? $goods['appr_number'] : $v[19],
                    'spec' => empty($v[20]) ? $goods['spec'] : $v[20],
                    'factory_name' => empty($v[21]) ? $goods['factory_name'] : $v[21],
                    'is_level' => !isset($is_user[$v[22]]) ? $goods['is_level'] : $is_user[$v[22]],
                    'full_cut' => '{"pieces":"' . $v[16] . '","forehead":"' . $v[17] . '"}',
                    'integral' => '{"give":"' . $v[23] . '","forehead":"' . $v[24] . '","more":"' . $v[25] . '"}',
                    'individual_share' => $v[26],
                    'share_type' => $v[27],
                    'share_commission_first' => $v[28],
                    'share_commission_second' => $v[29],
                    'share_commission_third' => $v[30],
                    'quick_purchase' => $v[31],
                    'hot_cakes' => $v[32],
                    'detail' => empty($v[33]) ? $goods['detail'] : $v[33],
                    'goods_num' => empty($v[34]) ? 0 : $v[34],
                    'is_negotiable' =>$v[18],//不开启面议
                    'addtime' => time(),
                ],$where),
                ['id' => $goods['id']]
            )->execute();
            try {
                if (!$res) {
                    $t->rollBack();
                    $error[$key] = '更新失败,或原数据未更改';
                    $errorCount += 1;
                } else {
                    $data_new = [];
                    //数字限制
                    if (is_numeric($v[34]) && $v[34] >= 0) {
                        $data_new['stock'] = $v[34];
                    }
                    if (trim($v[11]) >= 0 && $goods['price']!=trim($v['11']) ) {
                        $data_new['price'] = $v[11];
                    }
                    //存在商品条形码
                    if($v[35] && $where['attr']){
                        $where['attr']=substr($where['attr'],1,strlen($where['attr'])-2);
                        $data_new['attr'] = $where['attr'];
                        unset($where['attr']);
                    }
                    if ($data_new) {
                        Inventory::updateAll($data_new, ['goods_id' => $goods['id'], 'store_id' => $this->store->id]);
                    }
                    $t->commit();
                    $successCount += 1;
                }
            } catch (\Exception $e) {
                return $this->getErrors();
            }
        }

结果异常

mysql 隐藏auto_increment字段_代码块

结果正常

mysql 隐藏auto_increment字段_json_02

记一次神奇的mysql事务:在windows下导入都是使用代码块2的时候,结果正常;在linux下导入,结果异常。

 使用代码块1导入;windows下正常;linux下正常。

总结:mysql事务隐式提交!如果是显示提交(写出commit)那么会前一次的更新则不会提交入库;下一次查询会继续获取未更新前的值。这就是为啥会出现结果异常;查99是更新前的值!

正确的写法:else 立马commit