from_store_id; $to_store_id = $this->to_store_id; $pt_activity_id = $this->pt_activity_id; foreach ($to_store_id as $store_id_item) { $cacheActivity = $this->doCopyPt($from_store_id, $store_id_item, $pt_activity_id); $cacheCat = $this->doCopyPtCat($from_store_id, $store_id_item); $this->doCopyPtGoods($from_store_id, $store_id_item, $cacheActivity, $cacheCat); } } public function doCopyPt($from_store_id, $to_store_id, $pt_activity_id) { try { $list = PtActivity::find() ->where([ 'store_id' => $from_store_id, 'id' => $pt_activity_id ])->orderBy(['id' => SORT_ASC])->all(); $cache = []; foreach ($list as $value) { //判断是否为当前商城同步过此商品 $storeSyncExtLog = StoreSyncExtLog::findOne([ 'from_store_id' => $from_store_id, 'to_store_id' => $to_store_id, 'type' => StoreSyncExtLog::TYPE_PT, 'from_id' => $value['id'] ]); $id = $value['id']; $attr = $value->attributes; unset($attr['id']); $attr['store_id'] = $to_store_id; $attr['goods_ids'] = ''; $model = PtActivity::findOne($storeSyncExtLog->to_id ?? 0) ?: new PtActivity(); $model->setAttributes($attr, false); $model->is_delete = $attr['is_delete']; $model->save(); $cache[$id] = $model->id; (new StoreSyncExtLog())::handleData($from_store_id, $to_store_id, $value['id'], $model->id, StoreSyncExtLog::TYPE_PT); } return $cache; } catch(\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } public function doCopyPtCat($from_store_id, $to_store_id) { try { $list = PtActivityGoodsCat::find() ->where([ 'store_id' => $from_store_id ])->orderBy(['id' => SORT_ASC])->all(); $cache = []; foreach ($list as $value) { //判断是否为当前商城同步过此商品 $storeSyncExtLog = StoreSyncExtLog::findOne([ 'from_store_id' => $from_store_id, 'to_store_id' => $to_store_id, 'type' => StoreSyncExtLog::TYPE_PT_GOODS_CAT, 'from_id' => $value['id'] ]); $id = $value['id']; $attr = $value->attributes; unset($attr['id']); $attr['store_id'] = $to_store_id; $model = PtActivityGoodsCat::findOne($storeSyncExtLog->to_id ?? 0) ?: new PtActivityGoodsCat(); $model->setAttributes($attr, false); $model->is_delete = $attr['is_delete']; $model->save(); $cache[$id] = $model->id; (new StoreSyncExtLog())::handleData($from_store_id, $to_store_id, $id, $model->id, StoreSyncExtLog::TYPE_PT_GOODS_CAT); } return $cache; } catch(\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } public function doCopyPtGoods($from_store_id, $to_store_id, $cacheActivity, $cacheCat) { try { $old_activity_id = array_keys($cacheActivity); $list = PtActivityGoods::find() ->where([ 'store_id' => $from_store_id, 'activity_id' => $old_activity_id ])->orderBy(['id' => SORT_ASC])->all(); $cache = []; foreach ($list as $value) { $id = $value['id']; $attr = $value->attributes; $storeSyncExtLog = StoreSyncExtLog::findOne([ 'from_store_id' => $from_store_id, 'to_store_id' => $to_store_id, 'type' => StoreSyncExtLog::TYPE_PRODUCT, 'from_id' => $attr['goods_id'] ]); if ($storeSyncExtLog && !$storeSyncExtLog->to_id) { continue; } unset($attr['id']); $attr['store_id'] = $to_store_id; $attr['activity_id'] = $cacheActivity[$attr['activity_id']]; $cat = PtActivityGoodsCat::findOne(['id' => $attr['cat_id'], 'is_delete' => 0]); if (!$cat) { continue; } $attr['cat_id'] = $cacheCat[$attr['cat_id']]; $goods = Goods::findOne(['id' => $attr['goods_id'], 'is_delete' => 0]); if (!$goods) { continue; } $attr['goods_id'] = $storeSyncExtLog->to_id; $agattr = json_decode($value['attr'], true); $goodsNew = Goods::findOne($attr['goods_id']); $gattrNew = json_decode($goodsNew->attr, true); $agattrNew = []; foreach($agattr as $k => $item){ $attrNames = array_column($item['attr_list'], 'attr_name'); // var_dump($attrNames); foreach($gattrNew as $v){ $attrNamesNew = array_column($v['attr_list'], 'attr_name'); // var_dump($attrNamesNew); if($attrNames === $attrNamesNew){ // var_dump('$attrNames == $attrNamesNew'); $item['attr_list'] = $v['attr_list']; } } $agattrNew[] = $item; } $attr['attr'] = json_encode($agattrNew, JSON_UNESCAPED_UNICODE); //判断是否为当前商城同步过此商品 $storeSyncExtLog = StoreSyncExtLog::findOne([ 'from_store_id' => $from_store_id, 'to_store_id' => $to_store_id, 'type' => StoreSyncExtLog::TYPE_PT_GOODS, 'from_id' => $value['id'] ]); $model = PtActivityGoods::findOne($storeSyncExtLog->to_id ?? 0) ?: new PtActivityGoods(); $model->setAttributes($attr, false); $model->is_delete = $attr['is_delete']; $model->save(); (new StoreSyncExtLog())::handleData($from_store_id, $to_store_id, $value['id'], $model->id, StoreSyncExtLog::TYPE_PT_GOODS); $cache[$id] = $model->id; } return $cache; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } }