定制 pamungkasandono/laravel-nanamber 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

pamungkasandono/laravel-nanamber

Composer 安装命令:

composer require pamungkasandono/laravel-nanamber

包简介

Nanamber adalah library Laravel untuk membuat penomoran otomatis (auto number) dengan format yang fleksibel dan dapat dikustomisasi. Umum digunakan untuk penomoran dokumen, invoice, registrasi, dan sebagainya.

README 文档

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

Nanamber adalah library Laravel yang menyediakan cara mudah untuk menghasilkan nomor sekuensial dengan format yang dapat dikonfigurasi. Library ini menawarkan solusi untuk kasus-kasus seperti pembuatan nomor invoice, nomor referensi transaksi, kode tracking, dan lainnya yang membutuhkan nomor berurutan dengan format yang spesifik.

Fitur

  • Menghasilkan nomor sekuensial dengan format yang dapat dikonfigurasi
  • Dukungan placeholder tanggal dalam format
  • Padding yang dapat disesuaikan
  • Kemampuan untuk menghasilkan nomor secara batch
  • Nilai counter yang disimpan dalam database
  • Reset nilai counter

Instalasi

Persyaratan

  • PHP 8.2+
  • Laravel 8.0+

Cara Instalasi

Anda dapat menginstal library ini via Composer:

composer require pamungkasandono/laravel-nanamber

Publikasi Config

Publikasikan file konfigurasi dengan menjalankan:

php artisan vendor:publish --provider="PamungkasAndono\Laravel\Nanamber\NanamberServiceProvider" --tag="config"

Migrasi Database

Nanamber membutuhkan tabel database untuk menyimpan counter. Jalankan migrasi untuk membuat tabel tersebut:

php artisan migrate --path=vendor/pamungkasandono/nanamber/database/migrations

Migrasi akan membuat tabel auto_numbers dengan struktur berikut:

Schema::create('auto_numbers', function (Blueprint $table) {
    $table->id();
    $table->string('template_format')->unique();
    $table->integer('last_value')->default(0);
    $table->timestamps();
});

Penggunaan Dasar

Menghasilkan Nomor Sederhana

Contoh paling dasar menggunakan Nanamber:

use PamungkasAndono\Laravel\Nanamber;

// Menghasilkan nomor dengan format: 2025040001
$number = Nanamber::template('{Y}{m}{number}')->generate();

Format Template

Template dapat berisi:

  • {number} - Akan diganti dengan nomor sekuensial
  • Format tanggal dalam kurung kurawal {Y}, {m}, {d}, dll. - Akan diganti dengan tanggal saat ini sesuai format
  • Teks statis - Akan tetap ada dalam output

Contoh:

// Format: INV/2025/04/0001
$invoice = Nanamber::template('INV/{Y}/{m}/{number}')->generate();

// Format: DO-202504-0001
$deliveryOrder = Nanamber::template('DO-{Y}{m}-{number}')->generate();

Mengatur Padding

Secara default, bagian nomor diatur dengan padding 4 digit dengan karakter '0'. Anda dapat mengubahnya:

// Format: INV-2025-001 (Padding 3 digit)
$invoice = Nanamber::template('INV-{Y}-{number}')
    ->pad(3)
    ->generate();

// Format: INV-2025-1*** (Padding karakter * dengan posisi right)
$invoice = Nanamber::template('INV-{Y}-{number}')
    ->pad(4, '*', STR_PAD_RIGHT)
    ->generate();

Penggunaan Lanjutan

Menggunakan Closure untuk Template yang Dinamis

Anda dapat menggunakan Closure untuk membuat template yang lebih dinamis:

use Illuminate\Support\Str;

$buyer_id = '129';
$invoice = Nanamber::template(function ($date) use ($buyer_id) {
    return 'INV/' . $date->format('Y') . '/' . Str::padLeft($buyer_id, 4, '0') . '/{number}';
})->generate();

// Hasilnya: INV/2025/0129/0001

Mengatur Tanggal Khusus

Secara default, Nanamber menggunakan tanggal saat ini. Anda dapat mengatur tanggal khusus:

use Carbon\Carbon;

// Menggunakan tanggal spesifik untuk menghasilkan nomor
$date = Carbon::create(2023, 12, 25);
$invoice = Nanamber::template('INV/{Y}/{m}/{d}/{number}')
    ->setDate($date)
    ->generate();

// Hasilnya: INV/2023/12/25/0001

Menghasilkan Nomor Secara Batch

Untuk keperluan performa, Anda dapat menghasilkan beberapa nomor sekaligus:

// Menghasilkan 5 nomor invoice sekaligus
$invoices = Nanamber::template('INV/{Y}/{m}/{number}')
    ->generateBatch(5);

// $invoices adalah instance Collection yang berisi 5 nomor
// ['INV/2025/04/0001', 'INV/2025/04/0002', ..., 'INV/2025/04/0005']

Reset Nilai Counter

Untuk kasus tertentu, Anda mungkin perlu mengatur ulang nilai counter:

// Reset counter ke nilai 0
Nanamber::template('INV/{Y}/{number}')->resetValue();

// Reset counter ke nilai tertentu
Nanamber::template('INV/{Y}/{number}')->resetValue(999);
// Nomor selanjutnya yang dihasilkan: INV/2025/1000

Kasus Penggunaan

Nomor Invoice dengan Reset Bulanan

Buat nomor invoice yang direset setiap bulan:

// Di controller Anda:
public function createInvoice()
{
    $currentMonth = now()->format('m');
    $currentYear = now()->format('Y');

    // Cek apakah sudah bulan baru
    if ($this->isNewMonth()) {
        // Reset counter untuk template bulan ini
        Nanamber::template("INV/{$currentYear}/{$currentMonth}/{number}")->resetValue(0);
    }

    // Generate nomor invoice
    $invoiceNumber = Nanamber::template("INV/{$currentYear}/{$currentMonth}/{number}")->generate();

    // Buat invoice dengan nomor yang dihasilkan
    $invoice = Invoice::create([
        'invoice_number' => $invoiceNumber,
        // ...data lainnya
    ]);

    return $invoice;
}

private function isNewMonth()
{
    // Implementasi logika untuk mendeteksi bulan baru
    // Contoh: cek apakah ada invoice di bulan ini
    return Invoice::whereMonth('created_at', now()->month)
        ->whereYear('created_at', now()->year)
        ->count() === 0;
}

Nomor Referensi Departemen

Buat nomor referensi yang memiliki awalan sesuai departemen:

public function createReference($departmentCode)
{
    $departmentPrefixes = [
        'hr' => 'HR',
        'fin' => 'FIN',
        'ops' => 'OPS',
        'mkt' => 'MKT',
    ];

    $prefix = $departmentPrefixes[$departmentCode] ?? 'REF';

    $referenceNumber = Nanamber::template("{$prefix}-{Y}{m}-{number}")
        ->pad(5)
        ->generate();

    return $referenceNumber;

    // Contoh hasil:
    // HR-202504-00001
    // FIN-202504-00001
    // OPS-202504-00001
}

Nomor Faktur dengan Cabang

Buat nomor faktur yang mencakup kode cabang:

public function createInvoiceNumber($branchId)
{
    $branches = [
        1 => 'JKT',
        2 => 'BDG',
        3 => 'SBY',
        4 => 'MDN',
    ];

    $branchCode = $branches[$branchId] ?? 'UNK';
    $year = now()->format('Y');
    $month = now()->format('m');

    // Template yang berbeda untuk setiap cabang
    $invoiceNumber = Nanamber::template("{$branchCode}/{$year}/{$month}/{number}")
        ->generate();

    return $invoiceNumber;

    // Contoh hasil:
    // JKT/2025/04/0001
    // BDG/2025/04/0001
    // SBY/2025/04/0001
}

Konfigurasi

Anda dapat mengubah konfigurasi default Nanamber di file config/nanamber.php:

return [
    // Nama tabel database untuk menyimpan format template dan nilai sekuensial
    'table' => 'auto_numbers',

    // Nama kolom untuk menyimpan format template
    'field_template' => 'template_format',

    // Nama kolom untuk menyimpan nilai sekuensial terakhir
    'field_value' => 'last_value',

    // Nama kolom untuk menyimpan timestamp pembuatan
    'field_created_at' => 'created_at',

    // Nama kolom untuk menyimpan timestamp pembaruan terakhir
    'field_updated_at' => 'updated_at',
];

Pertimbangan Performa

  • Nanamber menggunakan locking database untuk mencegah race condition saat menghasilkan nomor berurutan.
  • Untuk kebutuhan high-volume, gunakan generateBatch() untuk mengurangi jumlah transaksi database.

Kontribusi

Kontribusi sangat diterima. Silakan membuat issue atau pull request di GitHub repository.

Lisensi

Library ini dirilis di bawah lisensi MIT.

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Credits

License

The MIT License (MIT). Please see License File for more information.

pamungkasandono/laravel-nanamber 适用场景与选型建议

pamungkasandono/laravel-nanamber 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 23 次下载、GitHub Stars 达 1, 最近一次更新时间为 2025 年 04 月 10 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「laravel」 「pamungkas andono」 「nanamber」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 pamungkasandono/laravel-nanamber 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 pamungkasandono/laravel-nanamber 我们能提供哪些服务?
定制开发 / 二次开发

基于 pamungkasandono/laravel-nanamber 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 23
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 10
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-04-10