ttbooking/accounting

v0.0.106 2024-02-21 15:21 UTC

README

此Laravel包提供了在虚拟账户之间进行强大、事务性资金或资产转账的支持。

特性

  • 基于DBMS的事务和悲观锁定
  • UUID以实现无缝集成和扩展
  • 通过MoneyPHP库支持大整数和任意精度数学
  • 支持货币转换
  • 区块链用于数据完整性检查
  • 通过控制台命令实现完全控制

要求

至少需要PHP 8.0和Laravel 9.31。
支持原生JSON字段的RDBMS(推荐)。

安装

使用Composer

$ composer require ttbooking/accounting

配置

安装后,您需要配置包,此时您有两个选择

  • 通过环境变量(您的应用程序的.env文件)
  • 使用包的配置文件

如果您选择第二个选项,您需要通过以下命令将配置文件复制到您的应用程序的配置目录中

$ artisan vendor:publish --provider=TTBooking\Accounting\AccountingServiceProvider --tag=config

如果您需要了解更多关于每个选项及其用法的信息,可以查看accounting.php配置文件。

如果您需要更改数据库表名或修改模式,您还需要执行以下命令

$ artisan vendor:publish --provider=TTBooking\Accounting\AccountingServiceProvider --tag=migrations

如果您需要发布配置文件和数据库迁移,可以省略"--tag"选项

$ artisan vendor:publish --provider=TTBooking\Accounting\AccountingServiceProvider

在完成所有数据库相关修改(如果需要)后,您需要执行artisan migrate命令。

建议为每个可能的账户所有者实体类型配置形态映射。
有关更多信息,请参阅https://laravel.net.cn/docs/10.x/eloquent-relationships#custom-polymorphic-types

用法

要创建账户并将其链接到现有实体,您可以使用Account外观(或相应的AccountManager接口)

$account = Account::create($user);

...将为用户$user创建账户。

要按所有者查找现有账户,尝试以下操作

$account = Account::find($user);

...如果存在,将找到$user的账户,否则将失败。
注意:如果您已启用账户自动创建,则不会失败。相反,它将创建缺少的账户。

要在两个账户之间转账资金,您可以使用Transaction外观(或相应的TransactionManager接口)

$transaction = Transaction::create($account1, $account2, new Money(10000, new Currency('USD')));

...将创建从$account1转到$account2的100美元转账的交易。

当您需要提交此交易时,只需执行$transaction->commit();
如果您不需要在项目中单独执行创建/提交操作,您可以配置自动提交功能。

要按UUID检索账户或交易,尝试以下操作

$account = Account::get($uuid);

...以获取账户或

$transaction = Transaction::get($uuid);

...以获取交易。