krgm.so-manager-dev.com/SHJ_BATCH_LOG_README.md

5.8 KiB
Raw Permalink Blame History

SHJ-8 共通バッチ処理ログシステム

概要

SHJ-8は全てのSHJ系バッチ処理の実行ログをbatch_logテーブルに登録する共通機能です。 仕様書に基づき、batch_logテーブルの各フィールドを活用してSHJ-8の要件を満たします

フィールドマッピング

  • デバイスIDparametersJSON形式
  • プロセス名process_name
  • ジョブ名messageの一部
  • ステータスstatus
  • ステータスコメントmessageerror_details
  • 登録日時start_timecreated_at
  • 更新日時end_timeupdated_at

処理フロー

【処理1】入力パラメーターをチェックする

  • デバイスID: device表での存在確認
  • プロセス名/ジョブ名: いずれか必須の確認
  • ステータス: 必須チェック
  • 登録日時/更新日時: yyyy/mm/dd形式の検証

【処理2】バッチ処理ログを登録する

  • batch_logテーブルへのINSERT処理
  • job_log_idはAUTO_INCREMENTで自動生成
  • status_commentは処理成功時に「処理成功」を設定
  • 仕様書指定の日付でcreated_at/updated_atを設定

【処理3】処理結果を返却する

  • 処理結果: 0=正常終了、1=異常終了
  • 異常情報の詳細メッセージ

使用方法

コマンド実行

php artisan shj:batch-log {デバイスID} {プロセス名} {ジョブ名} {ステータス} {登録日時} {更新日時}

実行例

# SHJ-4C室割当処理のログ記録
php artisan shj:batch-log 9999 "SHJ-4C" "室割当処理" "success" "2025/01/15" "2025/01/15"

# SHJメール送信処理のログ記録
php artisan shj:batch-log 9999 "SHJ-MAIL-SEND" "メール送信" "running" "2025/01/15" "2025/01/15"

# その他のSHJ系バッチのログ記録
php artisan shj:batch-log 9999 "SHJ-5" "駐車場空き確認" "completed" "2025/01/15" "2025/01/15"

テストデータ

database/seeders/ShjBatchLogTestSeeder.phpにテスト用のデバイスデータが含まれています。

テストデータ挿入

php artisan db:seed --class=ShjBatchLogTestSeeder

テストデバイス

  • device_id: 9999 (テスト用プリンター)

データベーステーブル

batch_log統一テーブル

CREATE TABLE `batch_log` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `process_name` varchar(50) NOT NULL COMMENT 'プロセス名',
  `status` varchar(20) NOT NULL COMMENT 'ステータス',
  `start_time` datetime NOT NULL COMMENT '開始時刻',
  `end_time` datetime DEFAULT NULL COMMENT '終了時刻',
  `parameters` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'パラメータJSON形式',
  `message` text DEFAULT NULL COMMENT 'メッセージ',
  `error_details` text DEFAULT NULL COMMENT 'エラー詳細',
  `execution_count` int(11) NOT NULL DEFAULT 0 COMMENT '実行回数',
  `success_count` int(11) NOT NULL DEFAULT 0 COMMENT '成功回数',
  `error_count` int(11) NOT NULL DEFAULT 0 COMMENT 'エラー回数',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
)

device

CREATE TABLE `device` (
  `device_id` int(10) UNSIGNED NOT NULL,
  `park_id` int(10) UNSIGNED DEFAULT NULL,
  `device_type` varchar(255) DEFAULT NULL,
  `device_subject` varchar(255) DEFAULT NULL,
  -- その他のフィールド...
)

ファイル構成

モデル

  • app/Models/Device.php - deviceテーブルのEloquentモデル
  • app/Models/Batch/BatchLog.php - batch_logテーブル対応モデル
    • SHJ-8仕様に基づく共通バッチログ機能
    • createShjJobLog() メソッドでbatch_logに統一記録
    • 全SHJ系バッチで共通利用

コマンド

  • app/Console/Commands/ShjBatchLogCommand.php - Artisanコマンド

サービス

  • app/Services/ShjBatchLogService.php - 核となるビジネスロジック

設定

  • app/Providers/AppServiceProvider.php - サービスの依存関係注入設定

ログ

処理の詳細なログはstorage/logs/laravel.logに出力されます。

エラーハンドリング

  • デバイスID存在チェックエラー
  • パラメータ形式エラー
  • 日付形式エラー
  • データベース挿入エラー
  • 全てのエラーはbatch_logテーブルに記録

入出力仕様

入力パラメーター

No パラメーター 桁数 多重度 備考
1 デバイスID 10 数字列 1
2 プロセス名 20 文字列 1
3 ジョブ名 20 文字列 1
4 ステータス 10 文字列 1
5 登録日時 10 日付(yyyy/mm/dd) 1
6 更新日時 10 日付(yyyy/mm/dd) 1

出力パラメーター

No パラメーター 桁数 多重度 備考
1 処理結果 1 数値 1 0:正常終了/1:異常終了
2 異常情報 ## 文字列 1

出力結果(仕様書準拠)

正常終了時

{
  "処理結果": 0,
  "異常情報": "",
  "batch_log_id": 1
}

エラー時

{
  "処理結果": 1,
  "異常情報": "エラー: デバイスID 9999 が見つかりません",
  "batch_log_id": 1
}

処理結果の値

  • 0: 正常終了
  • 1: 異常終了

異常情報

  • 正常時: 空文字
  • エラー時: エラーの詳細内容

注意事項

  1. デバイスIDは事前にdeviceテーブルに存在している必要があります
  2. プロセス名とジョブ名はいずれか必須ですが、どちらも設定可能です
  3. 日付形式はyyyy/mm/dd形式で入力してください
  4. batch_logテーブルを使用してSHJ-8の機能を実現しています
  5. すべてのSHJ系バッチで共通利用できる統一ログシステムです