xeops / iiko-exchange
dev-main
2023-10-02 14:14 UTC
Requires
- php: ^7.4
- ext-ftp: *
- ext-json: *
- ext-simplexml: *
- ext-ssh2: *
- php-http/guzzle6-adapter: ^1.1
- phpseclib/phpseclib: ~2.0
- symfony/config: ~3.0
- symfony/event-dispatcher: 3.2.*
- symfony/monolog-bundle: ^3.2
- symfony/yaml: 3.2.*
Requires (Dev)
- phpunit/php-code-coverage: 9.1.11
- phpunit/phpunit: ^9
- symfony/phpunit-bridge: 5.1.*
This package is auto-updated.
Last update: 2024-09-17 13:16:23 UTC
README
иiko数据交换库
该库是一个用于通过iikoWeb服务器将iiko与外部系统集成在一起的ETL过程。
集成的核心是iiko与外部系统之间计划性的单向数据交换。
/-------------/ /----------------/
/ iiko / -----> / 3d paty system /
/-------------/ /----------------/
也可能进行反向交换(第三方系统 -> iiko)
交换过程的开发步骤如下
- 创建使用该库的项目
- 项目经过iikoWeb开发者的审计和审查
- 项目通过composer集成到iikoWeb产品中
交换过程的工作方式
- 用户打开由Angular编写的Exchange前端应用程序
- 应用程序向iikoWeb服务器请求所有可能的交换类型
- 用户创建交换,指定名称和将使用的餐厅。在此阶段,可以不指定餐厅,此时将使用网络中的所有餐厅。
- 用户输入连接到外部系统的设置
- 用户根据文档或提示输入所有设置和映射(映射)。
- 用户设置计划
- 保存计划后,根据计划在iikoWeb服务器上创建任务。
- 到达执行时间时,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' ] ]
创建和使用扩展
在数据导出的每个阶段,可能需要获取
为此,类可以使用特性机制。每个扩展都是单独连接和使用的,更多详情请参阅上面的链接。
接下来,交换机制将自动填充您的服务所需的映射、配置、餐厅和期间。
翻译
示例
示例实现可在沙箱项目中找到。
启动项目
要启动项目,请使用沙箱。