# SHJ-8 共通バッチ処理ログシステム ## 概要 SHJ-8は**全てのSHJ系バッチ処理**の実行ログを**batch_logテーブル**に登録する**共通機能**です。 仕様書に基づき、batch_logテーブルの各フィールドを活用してSHJ-8の要件を満たします: ### フィールドマッピング - **デバイスID** → `parameters`(JSON形式) - **プロセス名** → `process_name` - **ジョブ名** → `message`の一部 - **ステータス** → `status` - **ステータスコメント** → `message`、`error_details` - **登録日時** → `start_time`、`created_at` - **更新日時** → `end_time`、`updated_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=異常終了 - 異常情報の詳細メッセージ ## 使用方法 ### コマンド実行 ```bash php artisan shj:batch-log {デバイスID} {プロセス名} {ジョブ名} {ステータス} {登録日時} {更新日時} ``` ### 実行例 ```bash # 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`にテスト用のデバイスデータが含まれています。 ### テストデータ挿入 ```bash php artisan db:seed --class=ShjBatchLogTestSeeder ``` ### テストデバイス - device_id: 9999 (テスト用プリンター) ## データベーステーブル ### batch_log(統一テーブル) ```sql 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 ```sql 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 | | ## 出力結果(仕様書準拠) ### 正常終了時 ```json { "処理結果": 0, "異常情報": "", "batch_log_id": 1 } ``` ### エラー時 ```json { "処理結果": 1, "異常情報": "エラー: デバイスID 9999 が見つかりません", "batch_log_id": 1 } ``` ### 処理結果の値 - **0**: 正常終了 - **1**: 異常終了 ### 異常情報 - 正常時: 空文字 - エラー時: エラーの詳細内容 ## 注意事項 1. デバイスIDは事前にdeviceテーブルに存在している必要があります 2. プロセス名とジョブ名はいずれか必須ですが、どちらも設定可能です 3. 日付形式はyyyy/mm/dd形式で入力してください 4. batch_logテーブルを使用してSHJ-8の機能を実現しています 5. すべてのSHJ系バッチで共通利用できる統一ログシステムです