xeops/iiko-exchange

安装次数: 2,633

依赖: 0

建议者: 0

安全: 0

星标: 3

关注者: 2

分支: 3

开放问题: 0

类型:项目

dev-main 2023-10-02 14:14 UTC

This package is auto-updated.

Last update: 2024-09-17 13:16:23 UTC


README

Build Status Total Downloads Latest Stable Version License Latest Unstable Version

иiko数据交换库

该库是一个用于通过iikoWeb服务器将iiko与外部系统集成在一起的ETL过程。

集成的核心是iiko与外部系统之间计划性的单向数据交换。

        /-------------/         /----------------/
       /    iiko     / ----->  / 3d paty system /
      /-------------/         /----------------/

也可能进行反向交换(第三方系统 -> iiko)

交换过程的开发步骤如下

  1. 创建使用该库的项目
  2. 项目经过iikoWeb开发者的审计和审查
  3. 项目通过composer集成到iikoWeb产品中

交换过程的工作方式

  1. 用户打开由Angular编写的Exchange前端应用程序
  2. 应用程序向iikoWeb服务器请求所有可能的交换类型
  3. 用户创建交换,指定名称和将使用的餐厅。在此阶段,可以不指定餐厅,此时将使用网络中的所有餐厅。
  4. 用户输入连接到外部系统的设置
  5. 用户根据文档或提示输入所有设置和映射(映射)。
  6. 用户设置计划
  7. 保存计划后,根据计划在iikoWeb服务器上创建任务。
  8. 到达执行时间时,iikoWeb将启动交换过程,使用所有必要的设置和映射。

第一步

创建项目

需要创建具有以下目录结构的项目

AcmeExchangeBundle
│
├── src
│   ├── Formatter
│   ├── Loader
│   ├── Mapping
│   ├── OptionSet(?)
│   ├── Request
│   ├── Resources
│   │   ├── config
│   │   │   └── services.yml
│   │   └── view
│   │       └── preview.html.twig
│   └── Transformer
├── Tests 
│   └── *****
└── README.md

项目初始化

项目初始化过程在单独的文章中描述。

连接库

composer require xeops/iiko-exchange

实现

1. 初始化交换服务

首先,在services.yml中创建一个交换服务

    exchange.acme:
        # Собственный класс можно не создавать, базовый класс содержит всю необходимую реализацию
        class: iikoExchangeBundle\Exchange\Exchange
        # в качестве аргумента необходимо передать уникальный код обмена, который будет использоваться для переводов и получения настроек
        # чтобы гарантировать уникальность - используйте названия внешней системы, с которой вы интегрируетесь и способ
        arguments: [ 'ACME_OLAP_TO_FTP_EXCHANGE_CODE' ]
        calls:
            # задайте расписание, с помощью которого обмен будет запускать в автоматическом режиме
            - [ setSchedules,[ [ '@exchange.schedule.cron' ] ] ]
            # задайте шаблон, с помощью которого будет выводиться превью выгрузки
            - [ setPreviewTemplate, [ 'AcmeExchangeBundle::preview.html.twig' ] ]
        # без тегирования система не узнает о том, что вы подключили новый механизм обмена
        tags:
            - { name: "exchange" }

! 请记住在services.yml中添加第一行

services:
    # начиная от этого отступа объявляйте сервисы

2. 创建与外部系统的连接

有多种连接类型

要创建自己的类型,请使用基本类。之后创建服务并将其连接到已创建的交换服务。

# Создание соединения
    exchange.acme.connection:
        class: AcmeExchangeBundle\Loader\AcmeOAuth2Connection
        arguments: [ 'ACME_CONNECTION', '@exchange.storage.session', '@logger' ]
        tags:
            - { name: "exchange.connection" }
# подключение соединения
    exchange.acme:
        class: iikoExchangeBundle\Exchange\Exchange
        .....
        calls:
            ......
            # для добавления соединения просто добавьте строчку ниже в уже существующий массив calls созданного сервиса обмена
            - [ setLoader, [ '@exchange.acme.connection' ] ]
            ......
        ........

要连接到iiko的连接,只需连接到已创建的连接服务

# подключение соединения к iiko
    exchange.acme:
        class: iikoExchangeBundle\Exchange\Exchange
        .....
        calls:
            ......
            # для добавления соединения просто добавьте строчку ниже в уже существующий массив calls созданного сервиса обмена
            - [ setExtractor, [ '@exchange.connection.iiko' ] ]
            ......
        ........

在此示例中,使用方向 iiko -> 第三方系统。如果需要反向导出,则需要交换连接。

3. 创建驱动

为每个任务创建一个驱动。为每个驱动创建服务

    exchange.acme.engine:
        # Собственный класс можно не создавать, базовый класс содержит всю необходимую реализацию
        class: iikoExchangeBundle\Engine\ExchangeEngine
        # В качестве аргумента необходимо передать уникальный код движка
        arguments: [ 'ACME_SALES' ]

3.1 创建请求

每个驱动由一组独特的请求和转换机制(转换器格式化器)定义。

    exchange.acme.request.sales:
        class: Exchange\AcmeExchangeBundle\Request\SalesRequest
        arguments: [ 'ACME_SALES_REQUEST' ]

3.2 创建转换器

在执行外部系统请求后,数据需要被清理并转换为将使用转换器导出的业务模型。

    exchange.acme.transformer.sales:
        class: Exchange\AcmeExchangeBundle\Transformer\SalesTransformer
        arguments: [ 'ACME_TRANSFORMER_SALES']

3.3 创建格式化器

在将数据转换到业务模型后,这些数据需要被格式化为接收方接受的请求格式。为此,需要实现格式化器

    exchange.acme.formatter.sales:
        class: Exchange\AcmeExchangeBundle\Formatter\SalesFormatter
        arguments: [ 'ACME_FORMATTER_SALES' ]

3.4 连接驱动模块

在实现请求转换器格式化器后,需要将它们作为模块连接到将使用它们的驱动程序中。

    exchange.acme.engine:
        class: iikoExchangeBundle\Engine\ExchangeEngine
        ....
        calls:
            # Запросы подключаются массивом, т.к. данные от запросов аккумулируются и передаются массивом в трансформацию
            - [ setRequests, [ [ '@exchange.acme.request.sales' ] ] ]
            - [ setFormatter, [ '@exchange.acme.formatter.sales' ] ]
            - [ setTransformer, [ '@exchange.acme.transformer.sales' ] ]

创建和使用扩展

在数据导出的每个阶段,可能需要获取

为此,类可以使用特性机制。每个扩展都是单独连接和使用的,更多详情请参阅上面的链接。

接下来,交换机制将自动填充您的服务所需的映射、配置、餐厅和期间。

翻译

示例

示例实现可在沙箱项目中找到。

启动项目

要启动项目,请使用沙箱