from_store_id; $to_store_id = $this->to_store_id; $activity_id = $this->activity_id; foreach ($to_store_id as $store_id_item) { //同步活动 $cacheActivity = $this->doCopySeckill($from_store_id, $store_id_item, $activity_id); //同步产品 $cache = $this->doCopySeckillGoods($from_store_id, $store_id_item, $cacheActivity); } } public function doCopySeckill($from_store_id, $to_store_id, $activity_id) { try { $list = SeckillActivity::find() ->where([ 'store_id' => $from_store_id, 'id' => $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_SECKILL, 'from_id' => $id ]); unset($attr['id']); $attr['store_id'] = $to_store_id; $model = SeckillActivity::findOne($storeSyncExtLog->to_id ?? 0) ?: new SeckillActivity(); $model->setAttributes($attr, false); $model->is_delete = $attr['is_delete']; $model->save(); (new StoreSyncExtLog())::handleData($from_store_id, $to_store_id, $id, $model->id, StoreSyncExtLog::TYPE_SECKILL); $cache[$id] = $model->id; } return $cache; } catch(\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } public function doCopySeckillGoods($from_store_id, $to_store_id, $cacheActivity) { try { $old_activity_id = array_keys($cacheActivity); $list = SeckillActivityGoods::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']]; $attr['goods_id'] = $storeSyncExtLog->to_id; $attr['sale_num'] = 0; $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); if ($gattrNew) { 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_SECKILL_GOODS, 'from_id' => $id ]); $model = SeckillActivityGoods::findOne($storeSyncExtLog->to_id ?? 0) ?: new SeckillActivityGoods(); $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_SECKILL_GOODS); } return $cache; } catch(\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } /** 同步秒杀 end */ }