//代码块一
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事务:在windows下导入都是使用代码块2的时候,结果正常;在linux下导入,结果异常。
使用代码块1导入;windows下正常;linux下正常。
总结:mysql事务隐式提交!如果是显示提交(写出commit)那么会前一次的更新则不会提交入库;下一次查询会继续获取未更新前的值。这就是为啥会出现结果异常;查99是更新前的值!
正确的写法:else 立马commit