d3yii2 / d3edi
此包的最新版本(dev-master)没有提供许可证信息。
EDI
dev-master
2022-04-01 12:38 UTC
Requires
- d3yii2/d3system: dev-master
- php-edifact/edifact-mapping: dev-master
- phpseclib/phpseclib: 2.0.29
- sabas/edifact: dev-master
- unyii2/yii2-panel: dev-master
- yiisoft/yii2: *
This package is auto-updated.
Last update: 2024-08-29 05:37:48 UTC
README
特性
- 在数据库中收集EDI消息
- 其他进程处理收集的消息和登记
- 处理状态和参考记录
- 错误状态和错误信息
使用的包
- sabas/edifac - 处理UN/EDIFACT格式的EDI消息的工具
- php-edifact/edifact-mapping - EDIFACT消息的xml文件
- unyii2/yii2-panel - 面板控制器和控件
数据库模式
安装
安装此扩展的首选方法是使用 composer。
运行
$ composer require d3yii2/d3edi "*"
或添加
"d3yii2/d3edi": "*"
到您的 composer.json
文件的 require
部分。
方法
用法
将edi数据映射到模型属性
class DepoEdiBooking extends BaseDepoEdiBooking { public function loadEdi($ediMessage): void { $r = $ediMessage->readEdiMessage(); $this->booking_ref_number = $r->readEdiDataValue(['RFF',['1'=>'BN']],1,0); $this->carier = $r->readEdiDataValue(['NAD',['1'=>'CA']],2,0); $this->containerType = $r->readEdiDataValue(['EQD',['1'=>'CN']],3,0); if(!$this->cont_type_id = CargoContTypeDictionary::getIdByEdiCode($containerType)){ $this->cont_type_id = null; $this->addError('cont_type_id','Undefined container type: ' . $containerType); } } }
处理
$cnt = 0; foreach(EdiMessage::find()->allNews() as $ediMessage){ if(!$transaction = $this->module->db->begintransaction()){ throw new \yii\db\Exception('can not start Begin transaction'); } try { $ediBooking = new DepoEdiBooking(); $ediBooking->loadEdi($ediMessage); if ($ediBooking->hasErrors() || !$ediBooking->validate()) { $ediMessage->saveError($ediBooking->getErrors()); continue; } if (!$ediBooking->save()) { throw new D3ActiveRecordException($ediBooking); } $ediMessage->saveProcessed($ediBooking); $transaction->commit(); $cnt ++; continue; }catch (Exception $e){ $transaction->rollBack(); Yii::error($e->getMessage()); Yii::error($e->getTraceAsString()); $ediMessage->saveError($e->getMessage()); } } return $cnt; }
未处理消息的面板
为了显示未处理的消息,可以使用面板解决方案 Yii2Panel
添加小部件
echo \unyii2\yii2panel\PanelWidget::widget([ 'name' => 'MyAllerts', ]);
在模块中添加参数面板
class MyModule extends Module { /** * @var array panels for PanelWidgets */ public $panels;
在模块配置中添加小部件
'mymodule' => [ 'class' => 'MyModule', 'panels' => [ 'MyAllerts' => [ [ 'route' => 'edi/panel/message', ] ] ], ],
在EDI模块中可以为面板设置访问权限的角色。否则,每个授权用户都可以访问面板小部件
'edi' => [ 'class' => 'd3yii2\d3edi\Module', 'accessRulesMessageRoles' => ['Depo3EdiFull'] ],