robodocxs / laravel-erp-middleware
为 Robodocxs 提供ERP功能的中间件包
Requires
- php: ^8.1
- laravel/framework: ^10.0|^11.0
- league/csv: ^9.0
- league/flysystem-sftp-v3: ^3.28
- spatie/laravel-data: ^3.0
Requires (Dev)
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^10.0
This package is not auto-updated.
Last update: 2024-09-23 16:31:08 UTC
README
本包为 Laravel 应用程序提供 ERP 集成中间件,包括基本的 DTOs、一次性的基本认证自定义中间件、自定义异常处理以及 SFTP 文件系统操作和 CSV 处理的额外功能。
安装
您可以通过 composer 安装此包
composer require robodocxs/laravel-erp-middleware
安装后,您应该发布配置文件
php artisan vendor:publish --provider="Robodocxs\LaravelErpMiddleware\LaravelErpMiddlewareServiceProvider" --tag="config"
这将发布 robodocxs-erp-middleware.php
配置文件到您的配置目录。
配置
如果您需要 SFTP 访问,请在 config/filesystems.php
文件中直接添加以下磁盘
'fileshare' => [
'driver' => 'sftp',
'host' => env('SFTP_HOST'),
'username' => env('SFTP_USERNAME'),
'password' => env('SFTP_PASSWORD'),
'privateKey' => env('SFTP_PRIVATE_KEY'),
'passphrase' => env('SFTP_PASSPHRASE'),
'root' => env('SFTP_ROOT'),
'visibility' => 'private', // `private` = 0600, `public` = 0644
'directory_visibility' => 'private', // `private` = 0700, `public` = 0755
// 'hostFingerprint' => env('SFTP_HOST_FINGERPRINT'),
// 'maxTries' => 4,
// 'passphrase' => env('SFTP_PASSPHRASE'),
// 'port' => env('SFTP_PORT', 22),
// 'root' => env('SFTP_ROOT', ''),
// 'timeout' => 30,
// 'useAgent' => true,
// Setting for the environment
]
然后添加以下键到您的 env 文件中以使用该磁盘
SFTP_HOST=your_sftp_host
SFTP_USERNAME=your_username
SFTP_PASSWORD=your_password
SFTP_PRIVATE_KEY=path_to_your_private_key
SFTP_PASSPHRASE=your_passphrase
SFTP_ROOT=/home/someuser
功能
- 使用 spatie/laravel-data 的基本 DTOs
- 一次性的基本认证自定义中间件
- 针对 API 友好响应的自定义异常处理
- 使用 league/flysystem-sftp-v3 的 SFTP 文件系统操作
- 使用 league/csv 的 CSV 处理能力
API 路由和中间件控制器
本包提供预定义的 API 路由和中间件控制器来处理它们。所有路由都由 AuthenticateOnceWithBasicAuth
中间件保护,该中间件实现了一次性基本认证。
以下路由可用
1. 列出产品
- 端点:
GET /api/products
- 查询参数:
search
(可选) - 响应: ProductDTOs 集合
2. 列出账户
- 端点:
GET /api/accounts
- 查询参数:
name
、vat_id
(均可选) - 响应: AccountDTOs 集合
3. 列出账户联系人
- 端点:
GET /api/accounts/{account_id}/contacts
- 响应: ContactDTOs 集合
4. 列出账户地址
- 端点:
GET /api/accounts/{account_id}/addresses
- 响应: AddressDTOs 集合
5. 列出账户自定义产品
- 端点:
GET /api/accounts/{account_id}/products
- 响应: CustomOrderCodeDTOs 集合
6. 检查价格和可用性
- 端点:
POST /api/products/price-and-availability
- 请求体: PARequestDTO 对象数组
- 响应: PAResponseDTO 对象数组
所有这些路由都需要认证。AuthenticateOnceWithBasicAuth
中间件将在第一次请求时提示凭证,然后允许后续请求在有限的时间内无需重新认证。
用法
DTOs
本包为处理各种数据结构提供了几个数据传输对象(DTOs)
ProductDTO
use Robodocxs\LaravelErpMiddleware\DTOs\ProductDTO; $productData = [ 'id' => '1', 'product_code' => 'ABC123', 'product_code_2' => 'XYZ-001', 'name' => 'Sample Product', 'description' => 'This is a sample product', 'base_unit_id' => 1, 'ean' => '1234567890123' ]; $productDTO = ProductDTO::from($productData);
AccountDTO
use Robodocxs\LaravelErpMiddleware\DTOs\AccountDTO; $accountData = [ 'id' => '1', 'erp_id' => 'ERP001', 'vat_id' => 'VAT001', 'name' => 'Sample Company', 'address' => [ 'street' => 'Main St', 'zip' => '12345', 'city' => 'Sampleville' ], 'delivery_addresses' => [], 'invoice_addresses' => [] ]; $accountDTO = AccountDTO::from($accountData);
自定义中间件
本包包含一个用于一次性基本认证的中间件。它将自动应用于本包提供的所有 API 路由。如果您想在您自己的路由中使用它,可以这样做
Route::get('/api/example', function () { // Your protected route logic here })->middleware('auth.basic.once');
SFTP 操作
本包为 SFTP 操作配置了一个新的 'fileshare' 磁盘。发布并配置 sftp.php
配置文件后,您可以使用它
use Illuminate\Support\Facades\Storage; $disk = Storage::disk('fileshare'); // Now you can use $disk to perform SFTP operations $contents = $disk->get('file.txt'); $disk->put('file.txt', 'Contents');
CSV 处理
本包包含用于 CSV 操作的 league/csv 包。以下是一个读取 CSV 文件的示例
use League\Csv\Reader; $csv = Reader::createFromPath('/path/to/your/csv/file.csv', 'r'); $csv->setHeaderOffset(0); foreach ($csv as $record) { // Process each record }
有关 SFTP 和 CSV 操作的更详细使用说明,请参阅相应的包文档
测试
要运行包测试,使用
composer test
贡献
欢迎贡献!请随时提交拉取请求。
许可证
MIT 许可证(MIT)。