from_store_id; $to_store_id = $this->to_store_id; foreach ($to_store_id as $store_id_item) { //商品分类 $cat_cache = $this->workerGoodsCat($from_store_id, $store_id_item); //商品列表 $goods_result = $this->workerGoods($from_store_id, $store_id_item, $cat_cache); //服务分类 $worker_cat_result = $this->workerCat($from_store_id, $store_id_item); //服务等级 $worker_level_result = $this->workerLevel($from_store_id, $store_id_item); } } //商品分类 private function workerGoodsCat($fromStoreId, $toId) { try { $cat_cache = []; $goods_cat_ = WorkerGoodsCat::find()->where(['store_id' => $fromStoreId])->asArray()->all(); foreach ($goods_cat_ as $goods_cat_item) { $id = $goods_cat_item['id']; unset($goods_cat_item['id']); //判断是否为当前商城同步过此商品 $storeSyncExtLog = StoreSyncExtLog::findOne([ 'from_store_id' => $fromStoreId, 'to_store_id' => $toId, 'type' => StoreSyncExtLog::TYPE_WORKER_CONFIG_GOODS_CAT, 'from_id' => $id ]); $goods_cat = WorkerGoodsCat::findOne($storeSyncExtLog->to_id ?? 0) ?: new WorkerGoodsCat(); $goods_cat->attributes = $goods_cat_item; $goods_cat->store_id = $toId; $goods_cat->created_at = time(); $goods_cat->updated_at = time(); $goods_cat->name = $goods_cat_item['name']; $goods_cat->pic_url = $goods_cat_item['pic_url']; $goods_cat->is_show = $goods_cat_item['is_show']; $goods_cat->big_pic_url = $goods_cat_item['big_pic_url']; $goods_cat->advert_pic = $goods_cat_item['advert_pic']; $goods_cat->advert_url = $goods_cat_item['advert_url']; $goods_cat->is_delete = $goods_cat_item['is_delete']; if (!$goods_cat->save()) { throw new \Exception(json_encode($goods_cat->errors, JSON_UNESCAPED_UNICODE)); } $cat_cache[$id] = $goods_cat->id; (new StoreSyncExtLog())::handleData($fromStoreId, $toId, $id, $goods_cat->id, StoreSyncExtLog::TYPE_WORKER_CONFIG_GOODS_CAT); } return $cat_cache; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } private function workerGoods($fromStoreId, $toId, $cat_cache) { $t = \Yii::$app->db->beginTransaction(); try { $workGoodsCache = []; $worker_goods_list = WorkerGoodsExt::find()->where(['store_id' => $fromStoreId])->asArray()->all(); foreach ($worker_goods_list as $goods_item) { $storeSyncExtLog = StoreSyncExtLog::findOne([ 'from_store_id' => $fromStoreId, 'to_store_id' => $toId, 'type' => StoreSyncExtLog::TYPE_PRODUCT, 'from_id' => $goods_item['goods_id'] ]); if ($storeSyncExtLog && !$storeSyncExtLog->to_id) { continue; } $goods_id = $storeSyncExtLog->to_id; $cat_id = $cat_cache[$goods_item['cat_id']]; if (!empty($goods_id) && !empty($cat_id)) { $workGoodsId = $goods_item['id']; $workGoodsCache[$workGoodsId] = 0; unset($goods_item['id']); //判断是否为当前商城同步过此商品 $storeSyncExtLog = StoreSyncExtLog::findOne([ 'from_store_id' => $fromStoreId, 'to_store_id' => $toId, 'type' => StoreSyncExtLog::TYPE_WORKER_CONFIG_GOODS, 'from_id' => $workGoodsId ]); $worker_goods = WorkerGoodsExt::findOne($storeSyncExtLog->to_id ?? 0) ?: new WorkerGoodsExt(); $worker_goods->attributes = $goods_item; $worker_goods->payment_type = $goods_item['payment_type']; $worker_goods->profit_base = $goods_item['profit_base']; $worker_goods->profit_max = $goods_item['profit_max']; $worker_goods->final_profit = $goods_item['profit_max']; $worker_goods->desc = $goods_item['desc']; $worker_goods->warn = $goods_item['warn']; $worker_goods->bind_worker = $goods_item['bind_worker']; $worker_goods->goods_id = $goods_id; $worker_goods->cat_id = $cat_id; $worker_goods->store_id = $toId; if (!$worker_goods->save()) { throw new \Exception(json_encode($worker_goods->errors, JSON_UNESCAPED_UNICODE)); } $workGoodsCache[$workGoodsId] = $worker_goods->id; (new StoreSyncExtLog())::handleData($fromStoreId, $toId, $workGoodsId, $worker_goods->id, StoreSyncExtLog::TYPE_WORKER_CONFIG_GOODS); } } $t->commit(); return $workGoodsCache; } catch (\Exception $e) { $t->rollBack(); return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } private function workerCat($fromStoreId, $toId) { try { $workerCatCache = []; $worker_cat_list = WorkerCat::find()->where(['store_id' => $fromStoreId])->asArray()->all(); foreach ($worker_cat_list as $item) { $workerCatId = $item['id']; $workerCatCache[$workerCatId] = 0; unset($item['id']); //判断是否为当前商城同步过此商品 $storeSyncExtLog = StoreSyncExtLog::findOne([ 'from_store_id' => $fromStoreId, 'to_store_id' => $toId, 'type' => StoreSyncExtLog::TYPE_WORKER_CONFIG_CAT, 'from_id' => $workerCatId ]); $worker_cat = WorkerCat::findOne($storeSyncExtLog->to_id ?? 0) ?: new WorkerCat(); $worker_cat->attributes = $item; $worker_cat->store_id = $toId; $worker_cat->created_at = time(); $worker_cat->updated_at = time(); $worker_cat->is_delete = $item['is_delete']; if (!$worker_cat->save()) { throw new \Exception(json_encode($worker_cat->errors, JSON_UNESCAPED_UNICODE)); } $workerCatCache[$workerCatId] = $worker_cat->id; (new StoreSyncExtLog())::handleData($fromStoreId, $toId, $workerCatId, $worker_cat->id, StoreSyncExtLog::TYPE_WORKER_CONFIG_CAT); } return $workerCatCache; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } //同步等级 private function workerLevel($from_store_id, $to_store_id) { try { $workerLevelList = WorkerLevel::find()->where(['store_id' => $from_store_id, 'is_delete' => 0])->asArray()->all(); foreach ($workerLevelList as $item) { $workerLevelId = $item['id']; $worker_level = WorkerLevel::findOne(['store_id' => $to_store_id, 'is_delete' => 0, 'level' => $item['level']]); if (!$worker_level) { $worker_level = new WorkerLevel(); } unset($item['id']); $worker_level->attributes = $item; $worker_level->store_id = $to_store_id; if (!$worker_level->save()) { return [ 'code' => 1, 'msg' => json_encode($worker_level->errors, JSON_UNESCAPED_UNICODE) ]; }; (new StoreSyncExtLog())::handleData($from_store_id, $to_store_id, $workerLevelId, $worker_level->id, StoreSyncExtLog::TYPE_WORKER_CONFIG_LEVEL); } return [ 'code' => 0, 'msg' => '同步成功' ]; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } }