承接 vetcore/vetmanager-migrator 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

vetcore/vetmanager-migrator

Composer 安装命令:

composer require vetcore/vetmanager-migrator

包简介

Laravel package for migrating data from VetManager API to local database

README 文档

README

Laravel пакет для миграции данных из VetManager API в локальную базу данных.

Установка

Через Composer (локальный пакет)

Добавьте пакет в composer.json вашего проекта:

{
    "repositories": [
        {
            "type": "path",
            "url": "./packages/vetmanager-migrator"
        }
    ],
    "require": {
        "vetcore/vetmanager-migrator": "@dev"
    }
}

Затем выполните:

composer require vetcore/vetmanager-migrator

Публикация конфигурации

php artisan vendor:publish --tag=vetmanager-migrator-config

Конфигурация

Добавьте в ваш .env файл:

VETMANAGER_DOMAIN=your-domain.vetmanager.ru
VETMANAGER_API_KEY=your-api-key
VETMANAGER_TIMEOUT=30

Также вы можете настроить классы моделей через переменные окружения:

VETMANAGER_MODEL_CITY=App\Models\Main\Address\City
VETMANAGER_MODEL_STREET=App\Models\Main\Address\Street
VETMANAGER_MODEL_CLIENT=App\Models\Main\Client\Client
VETMANAGER_MODEL_ADDRESS=App\Models\Main\Address\Address
VETMANAGER_MODEL_PET=App\Models\Main\Pet\Pet

Или отредактируйте файл config/vetmanager-migrator.php после публикации.

Использование

Базовое использование

use VetCore\VetManagerMigrator\VetManagerMigrator;

// Создание экземпляра (параметры берутся из конфига)
$migrator = new VetManagerMigrator();

// Или с явным указанием параметров
$migrator = new VetManagerMigrator('your-domain.vetmanager.ru', 'your-api-key');

// Импорт всех данных
$results = $migrator->migrateAll();

// Импорт отдельных типов данных
$citiesCount = $migrator->importCities();
$streetsCount = $migrator->importStreets();
$clientsCount = $migrator->importClients();
$addressesCount = $migrator->importAddresses();
$petsCount = $migrator->importPets();

Использование в Artisan команде

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use VetCore\VetManagerMigrator\VetManagerMigrator;

class VetManagerMigrateCommand extends Command
{
    protected $signature = 'vetmanager:migrate 
                            {--domain= : VetManager domain name}
                            {--api-key= : VetManager API key}
                            {--limit= : Limit number of records to import}';

    protected $description = 'Migrate data from VetManager to local database';

    public function handle()
    {
        $domain = $this->option('domain') ?? config('vetmanager-migrator.domain');
        $apiKey = $this->option('api-key') ?? config('vetmanager-migrator.api_key');
        $limit = $this->option('limit') ? (int) $this->option('limit') : null;

        if (empty($domain) || empty($apiKey)) {
            $this->error('Domain and API key are required');
            return 1;
        }

        try {
            $migrator = new VetManagerMigrator($domain, $apiKey);
            
            $this->info("Starting migration from VetManager: {$domain}");

            $results = $migrator->migrateAll($limit, function ($message) {
                $this->info($message);
            });

            $this->info('Migration completed successfully!');
            $this->table(
                ['Type', 'Imported'],
                [
                    ['Cities', $results['cities']],
                    ['Streets', $results['streets']],
                    ['Clients', $results['clients']],
                    ['Addresses', $results['addresses']],
                    ['Pets', $results['pets']],
                ]
            );

            return 0;
        } catch (\Exception $e) {
            $this->error('Migration failed: ' . $e->getMessage());
            return 1;
        }
    }
}

Использование клиента напрямую

use VetCore\VetManagerMigrator\VetManagerClient;

$client = new VetManagerClient('your-domain.vetmanager.ru', 'your-api-key');

// Получить все города
$cities = $client->getAll('city');

// Получить клиентов с лимитом
$clients = $client->getAll('client', 100, 500);

// Выполнить произвольный запрос
$data = $client->get('pet', ['filter' => ['owner_id' => 123]]);

Использование сервисов импорта напрямую

use VetCore\VetManagerMigrator\VetManagerClient;
use VetCore\VetManagerMigrator\Services\CityImporter;

$client = new VetManagerClient('your-domain.vetmanager.ru', 'your-api-key');
$importer = new CityImporter('App\Models\Main\Address\City');

$count = $importer->import($client, 100);

Структура пакета

  • VetManagerClient - клиент для работы с VetManager API
  • VetManagerMigrator - главный класс для миграции данных
  • Services/ - сервисы импорта для каждого типа данных:
    • CityImporter
    • StreetImporter
    • ClientImporter
    • AddressImporter
    • PetImporter
  • DataExtractor - утилиты для извлечения и обработки данных из API
  • Contracts/ - интерфейсы для расширения функциональности

Требования

  • PHP >= 8.2
  • Laravel >= 11.0
  • Guzzle HTTP Client
  • otis22/vetmanager-rest-api
  • otis22/vetmanager-url

Лицензия

MIT

统计信息

  • 总下载量: 1
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-12-13