icomefromthenet/vouchernum

生成唯一优惠券号码的帮助工具

v1.1.1 2019-06-14 00:49 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:20:12 UTC


README

Build Status

优惠券号码

在创建另一个库 General Ledger 时,我发现我需要一个能够为文件生成参考号码的功能,这个号码需要满足以下条件:

  1. 必须是唯一的。
  2. 需要有自定义的前缀和/或后缀。
  3. 需要由最终用户配置。

由于我的主要数据库是 MySql,我需要这个库既能将数字转换为优惠券(添加前缀、后缀和填充),还要提供一个序列仿真器。

生成优惠券号码的过程包括。

  1. 获取序列中的下一个值。
  2. 通过格式化器添加后缀、前缀或填充。
  3. 通过验证步骤确保参考号码符合规范。
  4. 进行唯一性检查。

安装

步骤 1. 您可以使用 composer 安装此库。

    icomefromthenet/vouchernum : 1.0.*

步骤 2. 创建一个名为 'general_ledger' 的新数据库,并在数据库/database.sql 下运行数据库构建脚本

    mysql vouchernum < database/database.sql

我使用自己的数据库迁移工具 Migrations,但为了方便,我包括了一个 sql 文件。

示例

以下内容摘自 example/example.php。

//--------------------------------------------------------------------------------
// Auloader 
//--------------------------------------------------------------------------------

use Symfony\Component\EventDispatcher\EventDispatcher;
use Monolog\Logger;
use Monolog\Handler\TestHandler;
use Doctrine\DBAL\Schema\Schema;
use DBALGateway\Table\GatewayProxyCollection;

use IComeFromTheNet\VoucherNum\VoucherContainer;
use IComeFromTheNet\VoucherNum\Model\VoucherGenRule\Command\CreateVoucherRuleCommand;
use IComeFromTheNet\VoucherNum\Model\VoucherGroup\Command\CreateVoucherGroupCommand;
use IComeFromTheNet\VoucherNum\Model\VoucherType\Command\NewVoucherTypeCommand;
use IComeFromTheNet\VoucherNum\Bus\Middleware\ValidationException;
use IComeFromTheNet\VoucherNum\VoucherGenerator;


//--------------------------------------------------------------------------------
// Setup External Dep 
//--------------------------------------------------------------------------------

$oLogger =  new Logger('test-ledger',array(new TestHandler()));
$oEvent  =  new EventDispatcher();
$oNow    =  new DateTime();

//--------------------------------------------------------------------------------
// Setup Database Connection
//--------------------------------------------------------------------------------

$aConfig = include '../database/config/default.php';


$config = new \Doctrine\DBAL\Configuration();
    
    $connectionParams = array(
        'dbname' => $aConfig[0]['schema']
        ,'user' => $aConfig[0]['user']
        ,'password' => $aConfig[0]['password']
        ,'host' => $aConfig[0]['host']
        ,'driver' => $aConfig[0]['type']
        ,'port'   =>$aConfig[0]['port']
    );

$oDatabase = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);

$oDatabase->connect();

$oGatewayProxy = new GatewayProxyCollection(new \Doctrine\DBAL\Schema\Schema());

//--------------------------------------------------------------------------------
// Create the Project Container
//--------------------------------------------------------------------------------
$oContainer = new VoucherContainer($oDatabase, $oEvent, $oLogger, $oGatewayProxy);

$oContainer->boot($oNow);


//--------------------------------------------------------------------------------
// Setup Example Vouchers
//--------------------------------------------------------------------------------


try {

$oDatabase->beginTransaction();

// Create some Voucher Groups

$oGroupOne    = new CreateVoucherGroupCommand();    
$oGroupTwo    = new CreateVoucherGroupCommand();
$oGroupThree  = new CreateVoucherGroupCommand();

$oGroupOne->setVoucherGroupName('Group One');
$oGroupOne->setSlugName('group_one');
$oGroupOne->setSortOrder(1);
$oGroupOne->setDisabledStatus(false);


$oGroupTwo->setVoucherGroupName('Group Two');
$oGroupTwo->setSlugName('group_two');
$oGroupTwo->setSortOrder(2);
$oGroupTwo->setDisabledStatus(false);

$oGroupThree->setVoucherGroupName('Group Three');
$oGroupThree->setSlugName('group_three');
$oGroupThree->setSortOrder(3);
$oGroupThree->setDisabledStatus(false);

$oContainer->getCommandBus()->handle($oGroupOne);
$oContainer->getCommandBus()->handle($oGroupTwo);
$oContainer->getCommandBus()->handle($oGroupThree);


// Create Some Voucher Gen Rules

$oVoucherRuleOne   = new CreateVoucherRuleCommand();
$oVoucherRuleTwo  = new CreateVoucherRuleCommand();
$oVoucherRuleThree = new CreateVoucherRuleCommand();
$oVoucherRuleFour = new CreateVoucherRuleCommand();
$oVoucherRuleFive = new CreateVoucherRuleCommand();


$oVoucherRuleOne->setVoucherRuleName('Rule A');
$oVoucherRuleOne->setSlugRuleName('rule_a');
$oVoucherRuleOne->setVoucherPaddingCharacter('#');
$oVoucherRuleOne->setVoucherSuffix('');
$oVoucherRuleOne->setVoucherPrefix('A');
$oVoucherRuleOne->setVoucherLength(8);
$oVoucherRuleOne->setSequenceStrategyName('sequence');
$oVoucherRuleOne->setValidationRules(array('always-valid'));
     
$oVoucherRuleTwo->setVoucherRuleName('Rule B');
$oVoucherRuleTwo->setSlugRuleName('rule_b');
$oVoucherRuleTwo->setVoucherPaddingCharacter('#');
$oVoucherRuleTwo->setVoucherSuffix('');
$oVoucherRuleTwo->setVoucherPrefix('B');
$oVoucherRuleTwo->setVoucherLength(8);
$oVoucherRuleTwo->setSequenceStrategyName('sequence');
$oVoucherRuleTwo->setValidationRules(array('always-valid'));

$oVoucherRuleThree->setVoucherRuleName('Rule C');
$oVoucherRuleThree->setSlugRuleName('rule_c');
$oVoucherRuleThree->setVoucherPaddingCharacter('#');
$oVoucherRuleThree->setVoucherSuffix('');
$oVoucherRuleThree->setVoucherPrefix('C');
$oVoucherRuleThree->setVoucherLength(8);
$oVoucherRuleThree->setSequenceStrategyName('sequence');
$oVoucherRuleThree->setValidationRules(array('always-valid'));

$oVoucherRuleFour->setVoucherRuleName('Rule D');
$oVoucherRuleFour->setSlugRuleName('rule_d');
$oVoucherRuleFour->setVoucherPaddingCharacter('#');
$oVoucherRuleFour->setVoucherSuffix('');
$oVoucherRuleFour->setVoucherPrefix('D');
$oVoucherRuleFour->setVoucherLength(8);
$oVoucherRuleFour->setSequenceStrategyName('sequence');
$oVoucherRuleFour->setValidationRules(array('always-valid'));

$oVoucherRuleFive->setVoucherRuleName('Rule E');
$oVoucherRuleFive->setSlugRuleName('rule_e');
$oVoucherRuleFive->setVoucherPaddingCharacter('#');
$oVoucherRuleFive->setVoucherSuffix('');
$oVoucherRuleFive->setVoucherPrefix('E');
$oVoucherRuleFive->setVoucherLength(8);
$oVoucherRuleFive->setSequenceStrategyName('sequence');
$oVoucherRuleFive->setValidationRules(array('always-valid'));


$oContainer->getCommandBus()->handle($oVoucherRuleOne);
$oContainer->getCommandBus()->handle($oVoucherRuleTwo);
$oContainer->getCommandBus()->handle($oVoucherRuleThree);
$oContainer->getCommandBus()->handle($oVoucherRuleFour);
$oContainer->getCommandBus()->handle($oVoucherRuleFive);



// Create Voucher Types
$oVoucherTypeOne = new NewVoucherTypeCommand();
$oVoucherTypeTwo = new NewVoucherTypeCommand();
$oVoucherTypeThree = new NewVoucherTypeCommand();
$oVoucherTypeFour = new NewVoucherTypeCommand();
$oVoucherTypeFive = new NewVoucherTypeCommand();

$oVoucherTypeOne->setName('Sales Journal');
$oVoucherTypeOne->setSlug('sales_journal');
$oVoucherTypeOne->setDescription('a short description');
$oVoucherTypeOne->setEnabledFrom($oNow);
$oVoucherTypeOne->setVoucherGroupId($oGroupTwo->getVoucherGroupId());
$oVoucherTypeOne->setVoucherGenruleId($oVoucherRuleOne->getVoucherGenRuleId());

$oVoucherTypeTwo->setName('COD Journal');
$oVoucherTypeTwo->setSlug('cod_journal');
$oVoucherTypeTwo->setDescription('a short description');
$oVoucherTypeTwo->setEnabledFrom($oNow);
$oVoucherTypeTwo->setVoucherGroupId($oGroupOne->getVoucherGroupId());
$oVoucherTypeTwo->setVoucherGenruleId($oVoucherRuleTwo->getVoucherGenRuleId());


$oVoucherTypeThree->setName('Returns Journal');
$oVoucherTypeThree->setSlug('returns_journal');
$oVoucherTypeThree->setDescription('a short description');
$oVoucherTypeThree->setEnabledFrom($oNow);
$oVoucherTypeThree->setVoucherGroupId($oGroupTwo->getVoucherGroupId());
$oVoucherTypeThree->setVoucherGenruleId($oVoucherRuleThree->getVoucherGenRuleId());


$oVoucherTypeFour->setName('Purchases Journal');
$oVoucherTypeFour->setSlug('purchases_journal');
$oVoucherTypeFour->setDescription('a short description');
$oVoucherTypeFour->setEnabledFrom($oNow);
$oVoucherTypeFour->setVoucherGroupId($oGroupOne->getVoucherGroupId());
$oVoucherTypeFour->setVoucherGenruleId($oVoucherRuleFour->getVoucherGenRuleId());


$oVoucherTypeFive->setName('Receipts Journal');
$oVoucherTypeFive->setSlug('receipts_journal');
$oVoucherTypeFive->setDescription('a short description');
$oVoucherTypeFive->setEnabledFrom($oNow);
$oVoucherTypeFive->setVoucherGroupId($oGroupTwo->getVoucherGroupId());
$oVoucherTypeFive->setVoucherGenruleId($oVoucherRuleFive->getVoucherGenRuleId());



$oContainer->getCommandBus()->handle($oVoucherTypeOne);
$oContainer->getCommandBus()->handle($oVoucherTypeTwo);
$oContainer->getCommandBus()->handle($oVoucherTypeThree);
$oContainer->getCommandBus()->handle($oVoucherTypeFour);
$oContainer->getCommandBus()->handle($oVoucherTypeFive);

} catch(ValidationException $e) {
    var_dump($e->getValidationFailures());
    $oDatabase->rollback();
    exit;
}

$oDatabase->commit();

//--------------------------------------------------------------------------------
// Generate Vouchers
//--------------------------------------------------------------------------------

$oGeneratorOne = new VoucherGenerator($oContainer);
$oGeneratorTwo = new VoucherGenerator($oContainer);
$oGeneratorThree = new VoucherGenerator($oContainer);
$oGeneratorFour = new VoucherGenerator($oContainer);
$oGeneratorFive = new VoucherGenerator($oContainer);

$oGeneratorOne->setVoucherById($oVoucherTypeOne->getVoucherTypeId());
$oGeneratorTwo->setVoucherById($oVoucherTypeTwo->getVoucherTypeId());
$oGeneratorThree->setVoucherById($oVoucherTypeThree->getVoucherTypeId());
$oGeneratorFour->setVoucherById($oVoucherTypeFour->getVoucherTypeId());
$oGeneratorFive->setVoucherById($oVoucherTypeFive->getVoucherTypeId());

for($i=0; $i < 100; $i++) {
    
    $oDatabase->beginTransaction();
    
    echo $oGeneratorOne->generate()   .' '. $oGeneratorTwo->generate() .' ';
    echo $oGeneratorThree->generate() .' '. $oGeneratorFour->generate() .' ';
    echo $oGeneratorFive->generate()  .' ';
    echo PHP_EOL;
    
    $oDatabase->commit();
    
}